|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 summerxxy 于 2015-3-12 15:18 编辑
在调用一个异步fifo模块仿真的时候遇到了一个问题。原程序中,apb_bb模块的输出配置baseband_top模块,baseband_top中调用了tx_fifo模块。结构大致如下:module top();
apb_bb apb(.xclk(xclk),
.data_to_txfifo(data_to_txfifo),
.txfifo_write(txfifo_write),
......);
baseband_top baseband(.xclk(xclk),
.data_to_txfifo(data_to_txfifo),
.wreq(txfifo_write),
........);
........
endmodule
tx_fifo 中的部分程序:
integer i;
always @(posedge wclk or negedge resetn)
begin
if(!resetn)
begin
for(i=0;i<DEPTH;i=i+1)
mem <= 8'b0;
end
else if(wreq&&!wfull)
mem[waddr] <= wdata;
end
wclk 就是baseband_top的xclk,和apb_bb的xclk是同源时钟,wclk 上升沿采样wreq,如果是高电平,就执行 mem[waddr] <= wdata; wreq是由apb模块输出,在某一个xclk上升沿拉高,下一个xclk上升沿拉低。仿真结果如下:
结果显示wclk没有采样到wreq;mem[0]还是0.
更改程序结构后:
module top();
apb_bb apb(.xclk(xclk),
.data_to_txfifo(data_to_txfifo),
.txfifo_write(txfifo_write),
......);
baseband_top baseband(.xclk(xclk),
.txfifo_read(txfifo_read),
........);
tx_fifo fifo(.xclk(xclk),
.wreq(txfifo_write),
.wdata(data_to_txfifo),
.......)
........
endmodule
将tx_fifo 拉出来,仿真结果如下:
这次wclk采样到wreq,执行了 mem[waddr] <= wdata。
是不是在仿真的时候,会将xclk进入模块的时间延迟计算进去? |
|