verilog这样写有问题吗?
如下所示,请大家帮忙看一下,标注部分的内容,是否可以这样?always @(posedge Clk or negedge Rst_n)
begin
if (!Rst_n) begin
DataInVld <= #1 0 ;
DataIn <= #1 0 ;
ByteSel <= #1 0 ;
end
else begin
DataInVld <= #1 0 ;//-----------先是这里
DataIn <= #1 0 ;
ByteSel <= #1 0 ;
if(OpVld) begin
DataInVld <= #1 1'b1 ;//-----------然后是这里
case(OpCmd)
CMD_RST : begin
DataIn<= #1 {OpCmd, 24'd0};
ByteSel <= #1 4'b1000 ;
end
CMD_RD, CMD_WR: begin
DataIn<= #1 {OpCmd, OpAddr, OpData, 8'd0};
ByteSel <= #1 4'b1110 ;
end
CMD_RD_STATUS, CMD_RX_STATUS : begin
DataIn<= #1 {OpCmd, 24'd0};
ByteSel <= #1 4'b1110 ;
end
CMD_MODIFY : begin
DataIn<= #1 {OpCmd, OpAddr, OpMask, OpData};
ByteSel <= #1 4'b1111 ;
end
CMD_BURST : begin
DataIn<= #1 {OpData,24'd0} ;
ByteSel <= #1 4'b1000 ;
end
default : begin
DataInVld <= #1 0 ;
DataIn <= #1 0 ;
ByteSel <= #1 0 ;
if(OpCmd == CMD_RTS) begin
DataInVld <= #1 1'b1 ;
DataIn <= #1 {OpCmd, 24'd0};
ByteSel <= #1 4'b1000 ;
end
end
endcase
end
end
end 延时 像 #1 是不能综合的,也就是在实际电路中是没用的,所以你这样是不能实现的 嗯,这个我知道,我想知道的是,注释部分的代码,合理吗?
由于FPGA的并行执行的,那么如果if(OpVld)条件满足了,那么DataInVld 究竟是0还是1啊? 这个我也不知道,没具体试过,感觉应该是1(应该跟c一样吧),前面的那句可能会被编译器优化掉,你可以仿真试试 回复【2楼】kj004
-----------------------------------------------------------------------
答案是这个DataInVld <= #1 1'b1 这种语句要尽量避免的,虽然仿真出来结果是对的,但是这样做不便系统布局布线,也不利于后期添加时序约束
页:
[1]