0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

assign组合逻辑和always@(*)组合逻辑的区别

FPGA之家 来源:OpenFPGA 作者:OpenFPGA 2022-03-15 14:08 次阅读

1.always@后面内容是敏感变量,always@(*)里面的敏感变量为*,意思是说敏感变量由综合器根据always里面的输入变量自动添加,也就是所有变量都是敏感列表,不用自己考虑。2.如果没有@,那就是不会满足特定条件才执行,而是执行完一次后立马执行下一次,一直重复执行,比如testbench里面产生50Mhz的时钟就(假设时间尺度是1ns)可以写成

always #25 CLK_50Mhz = ~CLK_50Mhz;

一般always@(*)是里面的语句是组合逻辑的。*代替了敏感变量。


	

而一般时序逻辑要写成

always@(posedge clk or negedge rst)

时钟信号clk上升沿或者复位信号rst下降沿的时候执行always块内的代码。

assign 用于描述组合逻辑always@(敏感事件列表) 用于描述时序逻辑敏感事件 上升沿 posedge,下降沿 negedge,或电平敏感事件列表中可以包含多个敏感事件,但不可以同时包括电平敏感事件和边沿敏感事件,也不可以同时包括同一个信号的上升沿和下降沿,这两个事件可以合并为一个电平敏感事件。在新的verilog2001中“,”和“or”都可以用来分割敏感事件了,可以用“*”代表所有输入信号,这可以防止遗漏。合法的写法:
always@ *
always@ (posedge clk1,negedge clk2)
always@ (a or b)
`timescale 100ns/100ns //定义仿真基本周期为100nsalways #1 clk=~clk //#1代表一个仿真周期即100ns
所有的assign 和 always 块都是并行发生的!并行块、顺序块将要并行执行的语句写在
fork//语句并行执行join
将要顺序执行的语句写在
begin//语句顺序执行end
并行块和顺序块都可以写在initial 或 always@ 之后,也就是说写在块中的语句是时序逻辑的对assign之后不能加块,实现组合逻辑只能用逐句的使用assign组合逻辑如果不考虑门的延时的话当然可以理解为瞬时执行的,因此没有并行和顺序之分,并行和顺序是针对时序逻辑来说的。值得注意的是所有的时序块都是并行执行的。initial块只在信号进入模块后执行1次而always块是由敏感事件作为中断来触发执行的。
2:assign 组合逻辑和always@(*)组合逻辑verilog描述组合逻辑一般常用的有两种:assign赋值语句和always@(*)语句。两者之间的差别有: 1. 被assign赋值的信号定义为wire型,被always@(*)结构块下的信号定义为reg型,值得注意的是,这里的reg并不是一个真正的触发器,只有敏感列表为上升沿触发的写法才会综合为触发器,在仿真时才具有触发器的特性。 2. 另外一个区别则是更细微的差别:举个例子,
wire a;reg b;assign a = 1'b0;always@(*)b = 1'b0;
在这种情况下,做仿真时a将会正常为0, 但是b却是不定态。这是为什么?verilog规定,always@(*)中的*是指该always块内的所有输入信号的变化为敏感列表,也就是仿真时只有当always@(*)块内的输入信号产生变化,该块内描述的信号才会产生变化,而像always@(*) b = 1'b0;这种写法由于1'b0一直没有变化,所以b的信号状态一直没有改变,由于b是组合逻辑输出,所以复位时没有明确的值(不定态),而又因为always@(*)块内没有敏感信号变化,因此b的信号状态一直保持为不定态。事实上该语句的综合结果有可能跟assign一样(本人没有去尝试),但是在功能仿真时就差之千里了。


原文标题:Verilog 里面,always,assign和always@(*)区别

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

审核编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电平
    +关注

    关注

    5

    文章

    357

    浏览量

    39812
  • 组合逻辑
    +关注

    关注

    0

    文章

    46

    浏览量

    10026
  • 代码
    +关注

    关注

    30

    文章

    4721

    浏览量

    68216

原文标题:Verilog 里面,always,assign和always@(*)区别

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    soc中的组合逻辑和时序逻辑应用说明

    芯片设计是现代电子设备的重要组成部分,其中组合逻辑和时序逻辑是芯片设计中非常重要的概念。组合逻辑和时序
    的头像 发表于 08-30 09:32 1150次阅读

    明德扬点拨FPGA高手进阶 第五章 verilog快速掌握---5.3 组合逻辑

    Verilog的程序代码,组合逻辑的代码结构如下:always@(*) begin代码语句;end或者是assign 代码语句;代码中@后是敏感列表,当括号内的条件满足时,就执行一次。
    发表于 11-21 09:23

    【技巧分享】时序逻辑组合逻辑区别和使用

    根据逻辑电路的不同特点,数字电路分为组合逻辑和时序逻辑,明德扬粉丝里的同学提出,无法正确区分,今天让我跟一起来学习一下两种逻辑
    发表于 03-01 19:50

    在FPGA中何时用组合逻辑或时序逻辑

    必须要用组合逻辑或者时序逻辑?例如:在verilog中,在always中被赋值了就必须是reg类型,assign赋值了就必须是wire类型。
    发表于 03-06 16:31

    组合逻辑电路的分析与设计-逻辑代数

    组合逻辑电路的分析与设计-逻辑代数   在任何时刻,输出状态只决定于同一时刻各输入状态的组合,而与先前状态无关的逻辑电路称为
    发表于 04-07 10:07 3156次阅读
    <b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>电路的分析与设计-<b class='flag-5'>逻辑</b>代数

    组合逻辑电路的设计

    组合逻辑电路的设计 组合逻辑电路的设计与分析过程相反,其步骤大致如下:  (1)根据对电路逻辑功能的要求,列出真值表;  (2)由真值表写
    发表于 04-07 10:12 1.3w次阅读
    <b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>电路的设计

    FPGA中组合逻辑和时序逻辑区别

    数字电路根据逻辑功能的不同特点,可以分成两大类,一类叫组合逻辑电路(简称组合电路),另一类叫做时序逻辑电路(简称时序电路)。
    发表于 11-20 12:26 8829次阅读

    什么是组合逻辑电路_组合逻辑的分类

    组合逻辑电路是无记忆数字逻辑电路,其任何时刻的输出仅取决于其输入的组合.
    的头像 发表于 06-22 10:53 4.9w次阅读
    什么是<b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>电路_<b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>的分类

    Verilog进行组合逻辑设计时有哪些注意事项

    ;第二种就是用assign 关键字描述的数据流赋值语句。 ②always 模块的敏感表为电平敏感信号的电路可几乎可以完成对所有组合逻辑电路的建模。a
    的头像 发表于 06-23 17:45 5266次阅读
    Verilog进行<b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>设计时有哪些注意事项

    你们知道alwaysassignalways@(*)之间的区别

    @,那就是不会满足特定条件才执行,而是执行完一次后立马执行下一次,一直重复执行,比如testbench里面产生50Mhz的时钟就(假设时间尺度是1ns)可以写成 always #25 CLK_50Mhz = ~CLK_50Mhz; 一般always@(*)是指里面的语句是
    的头像 发表于 06-27 11:47 1.5w次阅读

    组合逻辑电路和时序逻辑电路的区别和联系

    ,与电路原来的状态无关。而时序逻辑电路在逻辑功能上的特点是任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。下面小编给大家介绍一下“组合逻辑
    的头像 发表于 03-14 17:06 6510次阅读
    <b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>电路和时序<b class='flag-5'>逻辑</b>电路的<b class='flag-5'>区别</b>和联系

    组合逻辑电路之与或逻辑

    逻辑电路由多个逻辑门组成且不含存储电路,对于给定的输入变量组合将产生确定的输出,则这种逻辑电路称为组合
    的头像 发表于 02-04 11:46 1472次阅读
    <b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>电路之与或<b class='flag-5'>逻辑</b>

    常用的组合逻辑电路

    组合逻辑电路和时序逻辑电路是数字电路中两种重要的逻辑电路类型,它们主要区别在于其输出信号的依赖关系和对时间的敏感性。
    的头像 发表于 02-04 16:00 3902次阅读

    assign语句和always语句的用法

    Assign语句和Always语句是在硬件描述语言(HDL)中常用的两种语句,用于对数字电路建模和设计。Assign语句用于连续赋值,而Always语句用于时序
    的头像 发表于 02-22 16:24 2158次阅读

    什么是组合逻辑电路和时序逻辑电路?它们之间的区别是什么

    什么是组合逻辑电路和时序逻辑电路?时序逻辑电路和组合逻辑电路的
    的头像 发表于 03-26 16:12 2999次阅读