| 查看: 424 | 回复: 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 |
» 猜你喜欢
生命口C13面上会评时间
已经有11人回复
内心匮乏
已经有16人回复
生命口面上会评结束了吗大家有知道结果吗?现在还没有结果正常不?
已经有9人回复
有机物中金属离子降到1ppm以下,有什么好的方法吗?用过有机溶剂重结晶还是降不下来
已经有4人回复
投英文期刊如何查重
已经有6人回复
不要再数国自然申请书的 filecode 的分隔符个数了
已经有21人回复
伯胺上甲基求助
已经有7人回复
跨出版社商投稿
已经有5人回复
5个%2F,非固定段22个字母
已经有7人回复
生生命学部会评
已经有4人回复











回复此楼