青岛做网站哪里好,网站建设在那里接单,花生棒 做网站,自己做网站 为什么出现403参考了FPGA奇哥#xff08;下列视频中UP主#xff09;的讲解。 应该可以对多路读写DDR3进行操作#xff0c;仅仲裁#xff0c;不涉及DMA和Uibuf等。
2023年11月所写#xff0c;暂未进行测试#xff0c;日后补上。
第二天已完成测试#xff0c;功能可行。
深入FPGA底层…参考了FPGA奇哥下列视频中UP主的讲解。 应该可以对多路读写DDR3进行操作仅仲裁不涉及DMA和Uibuf等。
2023年11月所写暂未进行测试日后补上。
第二天已完成测试功能可行。
深入FPGA底层设计系列-循环优先级仲裁器算法位屏蔽仲裁算法与Verilog代码编写_哔哩哔哩_bilibili
位屏蔽算法 描述对输入的多通道请求进行仲裁。 步骤 1原码减去对应位数优先级最高的位次 2求得1中输出的反码 3通过2中输出与原码进行相与留下优先级最高的请求。
举例 【1】 四通道输入请求ABCD。破解后为4‘b1000此时D通道优先级最高。 4b1000-4’b1 4b0111 ~4b0111 4b1000 1000 1000 1000 仲裁完成准许A通道请求。 【2】 四通道输入请求ABCD。破解后为4‘b1110此时B通道优先级最高。 1110 - 0100 1010 ~1010 0101 1110 0101 0100 仲裁完成准许B通道请求。
Trick: 此外为了仲裁A通道需要对输入的请求进行拼接操作实现向高位借位的过程。 每次完仲裁以后都需要改变优先级最高的那一位的位次完成循环。
自写代码参考
module Fast_Aritbier_LoopPrior #(parameter In_Channel_Num 8
)(input wire Aritbier_Clk ,input wire Aritbier_Rst_n ,input wire [In_Channel_Num-1:0] I_req ,input wire I_Busy ,output wire [In_Channel_Num-1:0] O_Aritbier_Req
);//Aritbier Valuereg Aritbier_Value ;//Aritbier Flagwire Aritbier_Begin ;reg Aritbier_Flag ;reg [3:0] Aritbier_Flag_delay ; //Busyreg I_Busy_0;reg I_Busy_1;//reqreg [(In_Channel_Num1)-1:0] I_req_Double ;reg [In_Channel_Num-1:0] r_O_Aritbier_Req;assign Aritbier_Begin |I_req;assign O_Aritbier_Req r_O_Aritbier_Req;assign I_req_Double {I_req,I_req};always (posedge Aritbier_Clk) begin{I_Busy_0, I_Busy_1} {I_Busy,I_Busy_0};end//Aritbier_Flagalways (posedge Aritbier_Clk or negedge Aritbier_Rst_n) beginif(Aritbier_Rst_n d0) beginAritbier_Flag 1b0;end else if(Aritbier_Begin 1b1 Aritbier_Flag 1b0) beginAritbier_Flag 1b1;end else if(!I_Busy_0 I_Busy_1) beginAritbier_Flag 1b0;endendalways (posedge Aritbier_Clk) beginAritbier_Flag_delay {Aritbier_Flag_delay[2:0],Aritbier_Flag};endalways (posedge Aritbier_Clk or negedge Aritbier_Rst_n) beginif(Aritbier_Rst_n d0) beginAritbier_Value {{(In_Channel_Num - 1){1b0}},1b1};end else if((!I_Busy_0 I_Busy_1) Aritbier_Value[In_Channel_Num - 1] 1b1) beginAritbier_Value {{(In_Channel_Num - 1){1b0}},1b1};end else if(!I_Busy_0 I_Busy_1) beginAritbier_Value Aritbier_Value 1;end else beginAritbier_Value Aritbier_Value;endendalways (posedge Aritbier_Clk or negedge Aritbier_Rst_n) beginif(Aritbier_Rst_n d0) beginr_O_Aritbier_Req {(In_Channel_Num){1b0}};end else if(Aritbier_Flag 1b1 Aritbier_Flag_delay[0] 1b0) beginr_O_Aritbier_Req ((~(I_req_Double - {(In_Channel_Num){1b0},Aritbier_Value}))I_req);endend
endmodule