| 查看: 451 | 回复: 0 | |||
zhangyuque新虫 (正式写手)
|
[求助]
verilog小白求助大神
|
|
利用块RAM实现a,b两路数据延迟,ab两路的数据位宽都是32bit,速率都是61.44Mb/s。要求a路延时16 个时钟周期,b路延时8个时钟周期,为什么addrb1的初始值是32?望大神解惑! module bram_delay(clk_122p88MHz,a,b,a_delay,b_delay); input clk_122p88MHz; input [31:0] a; input [31:0] b; output [31:0] a_delay; output [31:0] b_delay; reg [31:0] a_delay; reg [31:0] b_delay; wire[5:0] addra,addrb; wire[31:0] douta,doutb; reg[5:0] addra1=0; reg[5:0] addra2=0; reg[5:0] addrb1=32; reg[5:0] addrb2=32; reg wea=0; reg web=0; reg flag=0; always@(posedge clk_122p88MHz) begin flag<= !flag; if(flag ==1'b1) begin a_delay<=a_delay; b_delay<=b_delay; wea<=1'b1; web<=1'b1; addra2<=addra2; addrb2<=addrb2; if(addra1==31) addra1<=0; else addra1<=addra1+1'b1; if(addrb1==63) addrb1<=32; else addrb1<=addrb1+1'b1; end else begin wea<=1'b0; web<=1'b0; a_delay<=douta; b_delay<=doutb; addra1<=addra1; addrb1<=addrb1; if(addra1<=15) //控制A路延迟的时间 addra2<=addra1+16; else addra2<=addra1-16; if(addrb1<=39) //控制B路延迟的时间 addrb2<=addrb1+8;//........................ else addrb2<=addrb1-8; end end assign addra=!flag?addra1:addra2; assign addrb=!flag?addrb1:addrb2; bram_16 bram_16 ( .clka(clk_122p88MHz), // input clka .wea(wea), // input [0 : 0] wea .addra(addra), // input [3 : 0] addra .dina(a), // input [31 : 0] dina .douta(douta), // output [31 : 0] douta .clkb(clk_122p88MHz), // input clkb .web(web), // input [0 : 0] web .addrb(addrb), // input [3 : 0] addrb .dinb(b), // input [31 : 0] dinb .doutb(doutb) // output [31 : 0] doutb ); endmodule |
» 猜你喜欢
广西大学-广州大学招聘博士后 欢迎广大优秀人才!!!
已经有7人回复
售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急
已经有13人回复
科研人应该花精力去思考如何解决问题,而不是去凝练问题
已经有17人回复
学科评审组评审是指会评吗?
已经有7人回复
售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急
已经有6人回复
初秋的晨风
已经有3人回复
面上没中,邀请各位路过的虫友分析一下分数
已经有11人回复
Ei源刊怎么投
已经有4人回复
两块石头
已经有5人回复
哈尔滨工业大学韩晓军教授课题组招收2027年硕士推免生及博士研究生
已经有3人回复










回复此楼