Menu Close

Verilog语法练习(4)组合逻辑,避免latch产生

1.

使用assign和always块来实现或(OR)门。


 

 

2.

用带有时钟的always块来实现a 或(OR) b。在时钟的上升沿来寄存结果。


 

 

3.

同时使用assign语句和always @(*)引导的条件句,对下图的MUX进行描述。

 

 


 

4.

在编写Verilog程序的时候,如果不是特意设计,尽量避免latch出现。这就要求在组合逻辑中,if 条件后需要加else的情况,case条件需要加default的情况。

举例:在以下情况下,综合器综合出来的电路会带有latch:


 

修改上述代码,使其不会出现latch。

参考波形:

扩展练习:修改下列代码,使其不会出现latch:


 

5.

使用case语句,将与3-bit sel值对应的数据(d0,d1,d2,d3,d4,d5)赋值给out。比如,如果sel 为3,将d3赋值给out,default情况下,将out输出0。


 

6.

在问题4中,为了避免组合电路中出现latch,在使用if或是case时,在每一种可能出现的情况下,都需要给输出赋值。如果一个case逻辑需要同时给4个输出赋值,比如下图所示,scancode为输入,方向键 left,down,right,up都是输出:

那么在scancode所列举的四种情况和default的情况下都需要对4个方向键输出。这里提供一个简洁的办法,如下所示:在always块里先将四个方向键赋值为0,并在case语句里根据需要再将方向键修改为1。


 

补充未完成的代码。

 

7.

在4-bit输入向量a中,将最先出现 ‘ 1 ’ 的低位输出(优先编码器)。比如

  • a = 4’b1010,a[1]最先有1,输出1
  • a = 4’b1111,a[0]最先有1,输出0
  • a = 4’b1000,输出3
  • 如果a中没有任何1出现,输出0。


 

8.

参考文章 Verilog case语句 使用casez,casex解决问题7。

 

对应视频:

Posted in FPGA 教材教案, FPGA习题库, 教材与教案, 资料区