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

verilog学习笔记

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-12 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
4 c2 R0 g5 Y( M, M' h

3 w  \: a9 W6 ?, Q4 p  ^* A
verilog学习笔记

& a1 `* J9 j* n% @" S(1)独热(one-hot)码
0 x  ^$ n# X% [" q- }+ V" J       所谓的独热码是指对任意给定的状态,状态向量中只有1位为1,其余位都是为0。n状态的状态机需要n个触发器。这种状态机的速度与状态的数量无关,仅取决于到某特定状态的转移数量,速度很快。当状态机的状态增加时,如果使用二进制编码,那么状态机速度会明显下降。而采用独热码,虽然多用了触发器,但由于状态译码简单,节省和简化了组合逻辑电路。独热编码还具有设计简单、修改灵活、易于综合和调试等优点。对于寄存器数量多、而门逻辑相对缺乏的FPGA器件,采用独热编码可以有效提高电路的速度和可靠性,也有利于提高器件资源的利用率。独热编码有很多无效状态,应该确保状态机一旦进入无效状态时,可以立即跳转到确定的已知状态。通过独热码可是实现简单的有限状态机。 5 S; |0 q( I" i' a& D0 Q
(2)有限状态机(Finite State Machine)8 F1 b+ u7 e. G1 q
Mealy 机是基于它的当前状态和输入生成输出的有限状态自动机。* O$ m9 t2 H- @, P: |
Moore 机是输出只由当前状态自己(不直接依赖于输入)确定的有限状态自动机。
- r: O5 k$ w) V4 M* C: D0 ?Verilog HDL常用三个always块描述同步Mealy状态机,两个时序always块分别用于描述现状态逻辑和对输出赋值,组合always块用户产生下一个状态。优点是:寄存器输出,输出无毛刺,并且代码比单always块清晰易读。缺点是:面积大于双always块。- Y9 w7 z( _6 g5 v, w
有限状态机最重要的是状态转移条件和当前的状态以及当前的输入。, e( H! L0 K- t/ f, x
下面以三always块模块给出状态机的Verilog模板。 0 O8 e5 _5 @9 j% r5 ^. |
// 构成状态跳转环
9 O$ Z6 M, \! O8 O+ r- Y) u6 }always @(posedge clk or negedge rst_n) 5 D! S+ n! q: I0 |' w/ H* I9 s/ w
         current_state <= next_state;
/ L) F# a' b; {# J5 p// 完成状态机的内部逻辑 ! e5 F9 p3 ^, g2 n2 T7 G! I1 r# K
always @ (current_state or ) begin
1 d* W, B4 E5 b          case(current_state) : A9 D" O: f! d. H0 x
                  S1: next_state = S2; 2 i* \, R* o0 T; i; E6 o$ A
                  S2: next_state = S1; 7 t! c; g4 L. ^- O5 c
          default: next_state = S2;
( ^7 e0 F+ y! D  Q# K5 [) N6 N          endcase
+ b4 `% |/ N" f# j; f; ?end
9 l6 H+ r& k2 X0 B* U8 X// 完成状态机的外部逻辑 3 U0 Y* h" n5 j+ R& u0 b
always @(current_state or ) begin
8 O, K, R  S0 b4 l' ^; E! s       case(current_state)   L5 N, s2 l& `. Q* b/ [9 D, u* K
       S1:
  c# g% j9 [5 C3 L+ ^9 e       S2: 5 m) n2 [6 I7 \: O1 D
       default:
" A. k' b0 f5 F# S" ]       endcase
% Y8 g9 I) L' X& w. wend  $ |5 C! Z3 G1 H+ z7 a: b& M% n
(3)综合状态机的一般原则 在硬件描述语言中,许多基于仿真的语句虽然符合语法规则,但是不能映射到硬件逻辑电路单元,如果要最终实现硬件设计,必须写出可以综合的程序。通常,综合的原则为:
/ q6 S* u) c2 ], n) {0 L2 B5 L' L; z* Q( E! T" G
综合之前一定要进行仿真,仿真会暴露逻辑错误。如果不做仿真,没有发现的逻辑错误会进入综合器,使综合的结果产生同样的逻辑错误。  每一次布线之后都要进行仿真,在器件编程或流片之前一定要进行最后的仿真。
" C; h+ {( @! ^, D- `( x$ m% o# m& S, L5 \
用Verilog HDL描述的异步状态机是不能综合的,应该避免用综合器来设计。在必须设计异步状态机时,建议用电路图输入的方法 # p/ G6 |; a9 M+ L- Y' z& W
状态机应该有一个异步或同步复位端,以便在通电时将硬件电路复位到有效状态。建议使用异步复位以简化硬件开销。
, D' N+ d  G4 m
! s- y9 W" q- D$ Y时序逻辑电路建模时,用非阻塞赋值。用always块写组合逻辑时,采用阻塞赋值。不要在多个always块中为同一个变量赋值。+ r4 u) C* i8 V

" `, j+ G) C7 Z6 F9 z9 lalways块中应该避免组合反馈回路。在赋值表达式右端参与赋值的信号都必须出现在敏感信号列表中,否则在综合时,会为没有列出的信号隐含地产生一个透明锁存器。
4 h8 \2 `% P0 t& r' |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 09:23 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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