| 查看: 356 | 回复: 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 |
» 猜你喜欢
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有6人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有3人回复
孩子确诊有中度注意力缺陷
已经有14人回复
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复













回复此楼