找回密码
 注册
关于网站域名变更的通知
查看: 140|回复: 1
打印 上一主题 下一主题

VerilogHDL学习笔记

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-2-29 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
(1)独热(one-hot)码1 k$ {) ?; L6 {7 b2 M8 s
       所谓的独热码是指对任意给定的状态,状态向量中只有1位为1,其余位都是为0。n状态的状态机需要n个触发器。这种状态机的速度与状态的数量无关,仅取决于到某特定状态的转移数量,速度很快。当状态机的状态增加时,如果使用二进制编码,那么状态机速度会明显下降。而采用独热码,虽然多用了触发器,但由于状态译码简单,节省和简化了组合逻辑电路。独热编码还具有设计简单、修改灵活、易于综合和调试等优点。对于寄存器数量多、而门逻辑相对缺乏的FPGA器件,采用独热编码可以有效提高电路的速度和可靠性,也有利于提高器件资源的利用率。独热编码有很多无效状态,应该确保状态机一旦进入无效状态时,可以立即跳转到确定的已知状态。通过独热码可是实现简单的有限状态机。 & |8 d; _5 O  v' O
(2)有限状态机(Finite State Machine)
* f) B" q* }& P2 g: p& K8 L2 k  w! fMealy 机是基于它的当前状态和输入生成输出的有限状态自动机。
7 O8 i$ v( C6 }8 ?5 l3 G$ g2 PMoore 机是输出只由当前状态自己(不直接依赖于输入)确定的有限状态自动机。
  g& m- r! ~4 O5 P  T. pVerilog HDL常用三个always块描述同步Mealy状态机,两个时序always块分别用于描述现状态逻辑和对输出赋值,组合always块用户产生下一个状态。优点是:寄存器输出,输出无毛刺,并且代码比单always块清晰易读。缺点是:面积大于双always块。& @! D! n! c& h6 H# {2 N/ d
有限状态机最重要的是状态转移条件和当前的状态以及当前的输入。- Q- w( K4 T* W4 ]: `, U
下面以三always块模块给出状态机的Verilog模板。 9 y9 q5 i7 u3 }, |
// 构成状态跳转环 ! F0 d3 M% J% f( d
always @(posedge clk or negedge rst_n)
% S& E" a/ u. i' B3 [         current_state <= next_state;
) l1 I: p  i4 r, @  s+ i$ I// 完成状态机的内部逻辑 2 h: q8 t% D  ]' _0 Q
always @ (current_state or ) begin $ F  T* z6 T: [6 j
          case(current_state)
1 z2 K. C: M0 |4 Q* @  w3 _                  S1: next_state = S2; # c* K0 }, I' G7 x5 Y
                  S2: next_state = S1; 2 V$ h( c- e2 v7 E6 W6 A7 u/ |
          default: next_state = S2;
1 Y( v+ R" Q5 `9 R" b          endcase
6 Y& f1 v0 |0 M, U) J6 jend
6 T" d" u, P" t- `6 H// 完成状态机的外部逻辑
( S3 f) e$ Q6 G9 N! {! walways @(current_state or ) begin
; `- l) s, h, x6 T       case(current_state)
  m, O+ [# d5 K4 r/ V! p       S1: - U. O8 f6 c2 R: i" u
       S2: # T& r# [& n$ l0 ]* P
       default: & X$ Q4 b/ v  N' J0 X+ v9 }* ?7 o
       endcase
5 F# y5 h8 W, J0 U3 Y( `end  
0 }) k/ l3 A( z$ U& Q; s(3)综合状态机的一般原则 在硬件描述语言中,许多基于仿真的语句虽然符合语法规则,但是不能映射到硬件逻辑电路单元,如果要最终实现硬件设计,必须写出可以综合的程序。通常,综合的原则为:
0 i* W* s: ]- h, `
" a2 Q$ \" y+ u6 ^4 I综合之前一定要进行仿真,仿真会暴露逻辑错误。如果不做仿真,没有发现的逻辑错误会进入综合器,使综合的结果产生同样的逻辑错误。  每一次布线之后都要进行仿真,在器件编程或流片之前一定要进行最后的仿真。$ L  N& P8 H, C
4 L) z) E) s  @! s. v* L/ U
用Verilog HDL描述的异步状态机是不能综合的,应该避免用综合器来设计。在必须设计异步状态机时,建议用电路图输入的方法
' F  [- L4 R8 I! ^1 L3 I状态机应该有一个异步或同步复位端,以便在通电时将硬件电路复位到有效状态。建议使用异步复位以简化硬件开销。
' O% e; Z, `, P! t( D
7 U/ r  d5 N) e1 x1 D: V7 D( F时序逻辑电路建模时,用非阻塞赋值。用always块写组合逻辑时,采用阻塞赋值。不要在多个always块中为同一个变量赋值。3 c# S" ^2 s7 O2 y
$ R9 H: ]$ i# b# O" {  l
always块中应该避免组合反馈回路。在赋值表达式右端参与赋值的信号都必须出现在敏感信号列表中,否则在综合时,会为没有列出的信号隐含地产生一个透明锁存器。  f3 e' z) b' f
$ h: P1 ~; Q7 B1 W( o9 @7 r  v
+ z3 T5 [7 |& I

. H/ l. A! w* a, a: X3 P1 p' X( J/ @6 X

该用户从未签到

2#
发表于 2020-2-29 16:59 | 只看该作者
VerilogHDL学习笔记
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-20 03:01 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表