请教两组代码的区别,哪组的风格好?
时间:10-02
整理:3721RD
点击:
请教阻塞赋值和非阻塞赋值的硬件实现,哪组代码的风格好?
代码1
always @ (posedge i_clk or negedge i_rst_n)
if (~i_rst_n)
o_drr_wr <= #1 1'b1 ;
else
case (i_im)
3'b000:
o_drr_wr <= #1 i_drr_wr_spi ;
3'b001:
o_drr_wr <= #1 i_drr_wr_pi ;
default:
o_drr_wr <= #1 1'b1 ;
endcase
代码2
always @ (*)
case (i_im)
3'b000: //spi output
o_drr_wr = i_drr_wr_spi ;
3'b001: //pi output
o_drr_wr = i_drr_wr_pi ;
default:
o_drr_wr = 1'b1 ;
endcase
代码1
always @ (posedge i_clk or negedge i_rst_n)
if (~i_rst_n)
o_drr_wr <= #1 1'b1 ;
else
case (i_im)
3'b000:
o_drr_wr <= #1 i_drr_wr_spi ;
3'b001:
o_drr_wr <= #1 i_drr_wr_pi ;
default:
o_drr_wr <= #1 1'b1 ;
endcase
代码2
always @ (*)
case (i_im)
3'b000: //spi output
o_drr_wr = i_drr_wr_spi ;
3'b001: //pi output
o_drr_wr = i_drr_wr_pi ;
default:
o_drr_wr = 1'b1 ;
endcase
Thanks very much
一个是时序逻辑,一个是组合逻辑,有什么比较性啊
可以考虑电气特性啦,硬件实现啦
看你具体的电路实现了,一个时序逻辑,一个组合逻辑
没法比较,根据具体应用场合来定。
这两种代码设计的变量 o_drr_wr 都设定为reg类型
时序逻辑, 我可以理解o_drr_wr
为一个寄存器,在时钟的上升沿取值
但是组合逻辑,怎么理解,o_drr_wr还是一个寄存器么?
上面这两种代码涉及的变量
o_drr_wr 都设定为reg类型
时序逻辑, 我可以理解o_drr_wr
为一个寄存器,在时钟的上升沿取值
但是组合逻辑,怎么理解,o_drr_wr还是一个寄存器么?
这两种代码涉及的变量
o_drr_wr 都设定为reg类型
时序逻辑, 我可以理解o_drr_wr
为一个寄存器,在时钟的上升沿取值
但是组合逻辑,怎么理解,o_drr_wr在电路中还是一个寄存器么?
你不是上面有always @*吗?
任何输入一变,输出立刻就会作出反应,这不就是组合逻辑吗?
和你verilog语言用的reg还是wire没有关系。
reg和wire都可以描述组合电路,只是方法不同。
case语句的default放x比较好,有利于x的传播,有利于bug发现,有利于前后仿一致。
这不是风格问题,这是功能问题,一个时序电路,一个组合电路,designer 要清楚他想做出来的是什么。
10L说的对。两段代码都不好,因为都是X-Termination
都听好的,初学者,呵呵
葡萄和西瓜哪个更好吃?
西瓜
always里面的用非阻塞赋值就是时序逻辑,反之时组合逻辑,看应用
