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

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

3天内不再提示

你们知道always,assign和always@(*)之间的区别吗

FPGA之家 来源:碎碎思 作者:碎碎思 2021-06-27 11:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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一样(本人没有去尝试),但是在功能仿真时就差之千里了。

编辑:jq

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

    关注

    14

    文章

    2065

    浏览量

    63571
  • 综合器
    +关注

    关注

    0

    文章

    12

    浏览量

    6726
  • CLK
    CLK
    +关注

    关注

    0

    文章

    132

    浏览量

    18102

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    求助,关于MC33774测量问题求解

    其更改为 0。但是我们只能得到第一次测量的电压数据,之后数据变成无效值(0x8000)。我们想知道为什么以及如何解决这个问题? 我们检查了发送两个捕获命令之间的时间。它是 40 毫秒,发送下一对捕获命令
    发表于 04-21 09:59

    如何电源管理电池供电和线路供电系统之间有什么区别

    如何电源管理电池供电和线路供电系统之间有什么区别
    发表于 04-06 08:24

    01. 如何在 Allegro 中快速区别不同网络?| 芯巧Allegro PCB 设计小诀窍

    Allegro PCB设计小诀窍系列--如何在Allegro中快速区别不同网络背景介绍:Allegro PCB设计工具可以通过高亮操作将选中的网络点亮,但是当我们的布线非常密集时,是不太好去进行
    发表于 04-03 15:51

    JH7110和 JH7100之间区别是什么?

    可以提供JH7110和JH7100的架构图嘛?想看下 JH7110和 JH7100之间区别
    发表于 03-27 07:27

    思特威推出全新1200万像素AI眼镜应用CMOS图像传感器

    技术平台打造,采用55nm Stacked BSI工艺制程,搭载思特威先进的SFCPixel®-2及ColGain HDR®技术,支持低功耗常开Always-On功能,具备低功耗、高动态范围、低噪声等
    的头像 发表于 03-12 15:13 402次阅读
    思特威推出全新1200万像素AI眼镜应用CMOS图像传感器

    博世第三代MEMS惯性传感器SMI330赋能智能驾驶感知与安全功能

    第三代 SMI330 MEMS 惯性传感器融合超低功耗与更宽的工作温度范围,在严苛汽车环境中依然保持卓越的传感性能,完美支持常开(always-on)及功耗敏感型应用。
    的头像 发表于 03-04 16:02 1973次阅读

    大神们,想知道你们都用什么ide编程调试器? Arduino IDE?还是 e2studio ?还有其他吗?哪个好用呢

    大神们,想知道你们都用什么ide编程调试器? Arduino IDE? 还是 e2studio ? 还有其他吗? 哪个IDE好用呢? 求指点呀
    发表于 11-30 12:05

    e203内部cpu执行单元booth4乘法器

    [1:0] current_state ; reg [1:0] next_state ; always@(posedge clk or negedge rstn) begin if(!rstn
    发表于 10-29 07:50

    第三代安全算法SHA3 Keccack核心分享

    //********************// //lota**************// wire [0:63]lota_out[5][5]; logic [6:0]RC; //轮数 always@(posedge clk
    发表于 10-28 07:13

    在利用Xilinx开发板烧录E203V2软件程序,无MCU下载器时利用FPGA Jtag下载器烧录软件程序

    ;wire ren;assign ren = cs & (~we);assign wen = ({MW{cs & we}} & wem);genvar i
    发表于 10-24 13:12

    帝奥微全新7路LDO PMIC DIO8017性能解析

    随着主流手机进入高像素与大底并重的新阶段,AON(Always-On)功能也正在经历多维度的技术革新与体验升级,如何在“低功耗休眠”与“快速唤醒响应”之间实现平衡成为了关键。
    的头像 发表于 09-22 13:58 2037次阅读
    帝奥微全新7路LDO PMIC DIO8017性能解析

    工控机和电脑的区别有多大?你知道

    工控机和电脑在我们的生活和工作中都扮演着重要角色,但它们之间存在着诸多区别。下面我们就来详细探讨一下。
    的头像 发表于 09-13 11:15 6407次阅读
    工控机和电脑的<b class='flag-5'>区别</b>有多大?你<b class='flag-5'>知道</b>吗

    【米尔-安路MYD-YM90X 创意秀】点灯也是入门绝活

    reg led_r; always@(posedge p2f_clk0) if(time_count>=T1MS)begin time_count<=26\'d0;//清零
    发表于 08-10 22:10

    隔离屏障的概念以及工作电压和测试电压之间区别

    电源中的电气隔离不仅仅是关乎安全——它更是性能和可靠性的基石。本文将探讨隔离屏障的概念以及工作电压和测试电压之间区别。它还将讨论标准为何重要?帮助工程师设计出满足当今严苛法规和应用需求的稳健系统。
    的头像 发表于 07-08 15:29 1100次阅读

    【高云GW5AT-LV60 开发套件试用体验】点亮LED

    clkout0 ); wire sys_rst_n = lock; reg [26:0]delay_cnt; always@(posedge clk_100M or negedge sys_rst_n
    发表于 06-18 17:16