马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
1.问题描述:从modelsim仿真图上看,标志信号没有被正确的采样到,但是该标志信号控制的信号却能够正确的执行。 以位计数器(bit_cnt)为例,相关verilog代码如下 always @(posedge MCLK or negedge rst) if(~rst)begin sck_r3 <= 1'b 0; sck_r2 <= 1'b 0; sck_r1 <= 1'b 0; end else if(RESET | reset_DRDY)begin sck_r3 <= 1'b 0; sck_r2 <= 1'b 0; sck_r1 <= 1'b 0; end else begin sck_r3 <= sck_r2; // synchronizers sck_r2 <= sck_r1; // synchronizers sck_r1 <= sck ^ pol; // select the desired polarity ofthe slave clk end assign shift_clk_negedge = ~(sck ^ pol) & sck_r1; //pol= 0, SCK's negedge;pol = 1, SCK's posedge assign shift_clk_negedge_1 = ~sck_r1 & sck_r2; always @(posedge MCLK or negedge rst) if(~rst) bit_cnt <= 3'b 111; else if(spi_state == idle) bit_cnt <= 3'b 111; else if(shift_clk_negedge == 1'b 1) bit_cnt <= bit_cnt - 3'h 1; pol信号固定为1,shift_clk_negedge和shift_clk_negedge_1信号为sck上升沿指示信号,高电平有效。bit_cnt应该是在MCLK的上升沿并且shift_clk_negedge为1时,才会进行减1操作。
Modelsim仿真图如下(前仿真):
从该图上可以看出,仅有第四根黄线部分采样到shift_clk_negedge信号为1,其他地方都未采样到,但是bit_cnt却进行了减1操作。但是第一根黄线这里,没有采样到shift_clk_negedge信号为1,也没有进行减1操作。源文件,仿真文件和仿真设置都没有问题。
该问题产生的原因是什么?为何与verilog描述的功能不符合? |