verilog基础---always

在verilog中,always块是一种常用的语句,可以是很简单的功能模块,也可以是结构最复杂的部分。

一般always语句可以分为两类电路。一种是组合逻辑。一种是时序逻辑。

第一类:组合逻辑

//-----1.1 组合逻辑 --------

Always @ (*)

Begin

If(a>b)

Q = 1;

Else

Q = 0;

end

//------- end -------------//

如1.1所示,就是一个简单的组合逻辑always块,它应该是被综合成一个一位的比较器。

//---- 1.2 组合逻辑 缺少敏感信号 ------

Always @ (a)

Begin

If(a>b)

Q = 1;

Else

Q = 0;

end

//------- end -------------//

代码 1-2 也是一个组合逻辑,与 1-1 不同的是,敏感信号列表中只有a没有 b。

我们知道,在 Verilog 语法中, always 块的含义是一个重复执行的语句。

那么 1-2 会综合成一个比较器:

  • 当 a 发生变化时,q 发生变化
  • 当 b 发生变化,由于 b 不再敏感信号列表中,所以 q 不变

这是一个彻头彻尾的软件思维,世界上不存在这种电路,综合器多半会综合一个与代码 1-1 一样的电路,然后报一个警告。

编写组合逻辑的 always 块,使用 * 代替敏感信号列表是一个简单方便而且不容易出错的好办法。

第二类:时序逻辑

//----- 2-1 时序逻辑  -------

reg [1:0] q;

always @ (posedge clk)

begin

q <= q + 1'b1;

End

注意:这里使用的是非阻塞赋值,我们的 q 这个时候被综合成一个寄存器,而不是一个软件上的变量。

代码 2-1 是一个时序逻辑单元,它应该被综合成一个计数器,每当时钟的上升沿,q 自增一。综合后的 部分 RTL 图如下:

// 2-2  时序逻辑 ,带异步复位 

reg [1:0] q;

always @ (posedge clk or negedge rst_n)

begin

if(!rst_n)

q <= 2'b00;

else

q <= q + 1'b1;

End

综合后的 RTL 图如下:

代码2-2综合成一个带有清零端的 D 触发器,其余与 2-1 无异。

转载地址:verilog基础---always_hhh_fpga的博客-CSDN博客_verilog always

always语句注意点:

1、不要在不同的always块内为同一个变量赋值。即某个信号出现在<=或者=左边时,只能在一个always块内。

2、不要在同一个always块内同时使用阻塞赋值(=)和非阻塞赋值(<=)。

3、在使用always块描述组合逻辑时使用阻塞赋值(=);使用always块描述时序逻辑时使用非阻塞赋值(<=)。

4、任何在always块内被赋值的变量都必须是寄存器型(reg)。

5always的敏感列表中可以同时包括多个电平敏感事件,也可以包括多个边沿敏感事件,但不能同时有电平和边沿敏感事件。另外,在敏感列表中,同时包括一个信号的上升沿敏感事件和下降沿敏感事件是不容许的,因为这两个事件可以合并为一个电平事件。

HHH~~~~

  • 35
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
多通道数据分时传送系统的设计 一、设计摘要: 现在通信技术是社会上的热门专业,而数据传输中传送的并行数据想要用来处理需要进 行分离和重组,将他们每一个并行数据抽离出来进行重新排序和处理,从而形成了可以 单独处理的数据为后续的电路做准备,这也是所有的数据传输电路中必须的一部分,做 好这一步将会为我们后续的工作能够顺利的完成做出一个很好的铺垫作用。 本论文中用到的方法很简单,也就是从前往后一步一步的进行推理,知道最后结果实现 。其中硬件的模拟是利用multisim软件,而软件的仿真是利用了QuartusII软件进行的。 二、设计具体要求: 1)列出真值表; 2)画出逻辑图; 3)试用Verilog HDL进行仿真; 三、多通道数据分时传送系统原理: 多通道数据分时传送系统原理是,通过数据选择器将并行数据分时一 一送出,再通过数据分配器(用译码器实现)将接收到的串行数据分配到其各个相应的输 出端口,从而恢复原来的并行数据.数据分配器选用74×154,为4~16线译码器,数据选 择器选用74×151,为8选1数据选择器。 关键字: 多通道数据,分时传送系统,数字仿真,数字设计,74×154数据分配器、74×151数据选 择器、Verilog HDL语言、multisim软件、QuartusII软件、真值表、数字逻辑图。 五、设计环节 1、真值表 "EN "ADD3 "ADD2 "ADD1 "H "BUS " "0 "0 "0 "0 "x¯00 "z0 " " "0 "0 "1 "x¯01 "z1 " " "0 "1 "0 "x¯02 "z2 " " "0 "1 "1 "x¯03 "z3 " " "1 "0 "0 "x¯04 "z4 " " "1 "0 "1 "x¯05 "z5 " " "1 "1 "0 "x¯06 "z6 " " "1 "1 "1 "x¯07 "z7 " "1 "0 "0 "0 "x¯08 "z8 " " "0 "0 "1 "x¯09 "z9 " " "0 "1 "0 "x¯10 "z10 " " "0 "1 "1 "x¯11 "z11 " " "0 "0 "0 "x¯12 "z12 " " "1 "0 "1 "x¯13 "z13 " " "1 "1 "0 "x¯14 "z14 " " "1 "1 "1 "x¯15 "z15 " 运用QuartusII 软件画出的电路图 加输入输出后的逻辑图如下 3、波形仿真图如下 verilog源程序 Module Vrfenshi(EN,A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7,ADD,Z); input A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7,EN,ADD; input [0:2] ADD; output [0:15] Z; reg [0:15] Z; always @ (EN or A or B or ADD)begin if(A & B & ADD) case (EN) 0:case (ADD) 0: Z = A0; 1: Z = A1; 2: Z = A3; 3: Z = A4; 4: Z = A5; 5: Z = A6; 6: Z = A6; 7: Z = A7; default : Z= Z; 1:case (ADD) 0: Z = B0; 1: Z = B1; 2: Z = B2; 3: Z = B3; 4: Z = B4; 5: Z = B5; 6: Z = B6; 7: Z = B7; default : Z=Z; endcase else default; {A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7} = Z; end endmodule 四、结论 本设计通过数据选择器将并行数据分时一一送出,再通过数据分配器(用译码器实现)将 接收到的串行数据分配到其各个相应的输出端口,从而恢复原来的并行数据.通过此种 方法则实现了多通道分时传送的目的,即完成了多通道分时传送系统的数字设计。 心得体会 要学习好数字设计这门课程,只有理论的学习是不够的,因为学习的最终目的是利用数 字设计解决实际问题。课本原理知识的学习是基础,而课程设计通过学习实际的应用, 能够让我们更好地把已经学会了的知识融会贯通。在课程设计中,我们学到很多未知的 知识,加强了动手能力,增强了合作意识,同时我们也熟悉multisim软件、QuartusII软 件,以及office办公软件,对以后的工作学习十分有益。理论加实践,才能算真正的学 会了数字设计这门课。 参考文献 1、《数字设计原理与实践(第四版)》John F . Wakerly著 ,高等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值