[关闭]
@ydleenudt 2015-04-17T00:10:55.000000Z 字数 795 阅读 1179

4.8硬件描述语言

数字系统设计


延迟

实现方式

使用assign #num (ab, bb, cb) = ~(a, b, c);
注意:相关联的输入之间会相互影响

电路描述与综合

电路层次

行为级(behavioral) -> 数据流级(dataflow) -> 门级(gate-level)
自动从数据流转换为行为级描述称为综合

锁存器和触发器

触发器和锁存器都使用非阻塞赋值,latch在高电平传值,trigger在clk上升沿传值。

锁存器Latch

latch在使用中要尽量避免

遗漏了default或是else,可能产生非预期的使用旧值,产生latch。

eg:

  1. always@(a or b or c or sel)
  2. begin
  3. case(sel)
  4. begin
  5. out = 1'bx;
  6. 2'b00: out=a;
  7. 2'b01: out=b;
  8. 2'b10: out=c;
  9. endcase
  10. //这里缺少defalut
  11. end

Latch在FPGA中往往会占据很多资源。

D触发器

阻塞赋值与非阻塞赋值

eg:

  1. always@(posedge clk)
  2. begin
  3. q1 <= in;
  4. q2 <= q1;
  5. q3 <= q2;
  6. end
  7. //需要3个clk来赋值
  8. VS
  9. always@(posedge clk)
  10. begin
  11. q1 = in;
  12. q2 = q1;
  13. q3 = q2;
  14. end

阻塞赋值(<)

计算和赋值同时进行

非阻塞赋值(<=)

Guidline:

优先级电路

避免使用优先级电路,如果每个分支的条件是互斥的,将得到更简单的电路。
eg:

  1. if(i==b'0000)
  2. //实际上增加了限定条件,使得输入互斥
  3. VS
  4. if(i0==b'0)

有限状态机

描述各组件

重点

wire类型与reg类型

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注