首页 > 编程语言 >语法回顾-《Verilog编程艺术》之赋值操作

语法回顾-《Verilog编程艺术》之赋值操作

时间:2024-03-30 13:32:52浏览次数:30  
标签:变量 强度 编程 线网 Verilog 驱动 assign 赋值

目录

Verilog 赋值操作

连续赋值

过程赋值


参考《Verilog 编程艺术》魏家明著

Verilog 赋值操作

1.连续赋值(Continuous assignment),用于对线网Nets的赋值

2.过程赋值(Procedural assignment),用于对变量variables的赋值

3.过程连续赋值:assign/deassign 和 fork/realease

赋值由两部分构成:左手端LHS和右手端RHS,它们由 = 或 <= 分开。

连续赋值

当RHS发生变化时,连续赋值就会发生。连续赋值可以模拟组合逻辑,不需要使用逻辑门,直接使用逻辑表达式驱动线网。

例子:

assign {carry_out, sum_out} = ina + inb + carry_in;
assign mynet = {enable ? data : 1'b0};

在声明线网时也可以赋值,但是这个线网就不能被多驱动了

wire mynet = {enable ? data : 1'b0};

我们可以针对下面这些类型线网的连续赋值指定驱动强度:wire,wand,wor,tri,triand,trior,trireg,tri0和tri1

使用驱动强度的规则:

1.连续赋值的驱动强度既可以在线网声明时指定,也可以在单独的赋值(使用assign)中指定。当有连续赋值驱动线网时,就按照驱动强度的值驱动线网。

2.驱动强度的值应该包含两个:一个是线网等于1的驱动强度;另一个是线网等于0的驱动强度。下面分别是线网等于1和0的驱动强度:

supply1;strong1;pull1;weak1;highz1;
supply0;strong0;pull0;weak0;highz0;

3.这两个驱动强度的顺序是任意的

4.这两种组合(highz1,highz0)和(highz0,highz1)是非法的,不能使用。

5.如果没有指定驱动强度,那么就默认使用(strong1,strong0)

例子:

assign (strong1, pull0) mynet1 = enable;
assign (strong0, highz1) mynet2 = enable;

过程赋值

过程赋值就是把值放到变量中。过程赋值没有持续时间,相反,变量将保持赋值的值,直到发生下一次对变量的赋值。

过程赋值发生在过程快(always,initial,task,和function)中,可以把它认为是触发赋值(Triggered assignment)。当执行到达过程快的赋值时,触发就发生。过程赋值受执行语句控制,事件控制,延迟控制,if语句,case语句和循环语句都能用来控制是否执行赋值操作。

变量声明赋值(Variable declaration assignment)是一种特殊的过程赋值,允许在声明变量时把初始值赋给变量。

1/对变量声明赋值所赋的值只能输常数。

2/对数组不能使用变量声明赋值。

3/只允许在模块级使用变量声明赋值。

4/如果对同一个变量既有变量声明赋值,又有在initial中赋了其他值,那么它们的执行顺序是不定的。

例子:变量声明赋值

reg [3:0] a = 4'h4;
// 等价于
reg [3:0] a;
initial a = 4'h4;

标签:变量,强度,编程,线网,Verilog,驱动,assign,赋值
From: https://blog.csdn.net/qq_53922164/article/details/137170937

相关文章

  • 语法回顾-《Verilog编程艺术》之表达式
    目录表达式操作符操作符优先级整数算数操作符比较操作符逻辑操作符位运算操作符归约操作符移位操作符条件操作符连接操作符操作数向量的抽取数组的访问字符串表达式位长符号表达式赋值和截断与x/z比较参考《Verilog 编程艺术》魏家明著表达式表达式是......
  • windows下socket客户端编程示例
    #include<iostream>#include<winsock2.h>#include<ws2tcpip.h>#include<windows.h>#pragmacomment(lib,"Ws2_32.lib")intsocket_client_demo(char*addr,intport){ charrecvbuf[1024]={0}; intretVal=-1;#......
  • java Web洗衣店管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
    一、源码特点   JSP洗衣店管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。javaWeb洗衣店管理系统二、功能介绍(......
  • java Web 疫苗预约管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
    一、源码特点   JSP疫苗预约管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。javaWeb疫苗预约管理系统二、功能介......
  • Linux内核驱动编程的一道陷阱题(转载)
    本篇转载于:https://blog.csdn.net/yhb1047818384/article/details/84073838 原文如下:------看过一道linux内核驱动编程的题目,我觉得有点价值。题目很简单,凭记忆整理了下,代码如下:#include<linux/init.h>#include<linux/module.h>#include<linux/delay.h>#include<l......
  • C#多线程编程详细教学
     在C#中,多线程编程是一种非常重要的技术,它允许程序同时执行多个任务,从而提高了应用程序的响应性和整体性能。本文将详细介绍C#中的多线程编程,包括基本概念、线程创建、线程同步以及相关的代码示例。一、基本概念线程是操作系统进行运算调度的最小单位,它被包含在进程之中,是......
  • 【人工智能入门必看的最全Python编程实战(6)】
    ---------------------------------------------------------------------1.AIGC未来发展前景未完持续…1.1人工智能相关科研重要性拥有一篇人工智能科研论文及专利软著竞赛是保研考研留学深造以及找工作的关键门票!!!拥有一篇人工智能科研论文及专利软著竞赛是保研考研......
  • Delphi模式编程
    文章目录Delphi模式编程涉及以下几个关键方面:**设计模式的应用****Delphi特性的利用****实际开发中的实践**Delphi模式编程的实例Delphi模式编程是指在使用Delphi这一集成开发环境(IDE)和ObjectPascal语言进行软件开发时,采用设计模式(DesignPatterns)来解决常见编程问......
  • 2024年03月CCF-GESP编程能力等级认证C++编程八级真题解析
    本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。一、单选题(每题2分,共30分)第1题为丰富食堂菜谱,炒菜部进行头脑风暴。肉类有鸡肉、牛肉、羊肉、猪肉4种,切法有肉排、肉块、肉末3种,配菜有圆白菜、油菜、豆腐3种,辣度有......
  • 2024年03月CCF-GESP编程能力等级认证C++编程七级真题解析
    本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。一、单选题(每题2分,共30分)第1题下列关于排序的说法,正确的是()。A.冒泡排序是最快的排序算法之一。B.快速排序通常是不稳定的。C.最差情况,N个元素做归并排序......