Verilog HDL是一种用于数字系统设计的语言。Verilog HDL既是一种行为描述语言也是一种结构描述语言

  • 行为描述——逻辑——reg型变量
  • 结构描述——连线——wire型变量

这就是说,无论描述电路功能行为的模块或描述元器件或较大部件互联的模块都可以用Verilog语言来建立电路模型。按照一定的规则和风格编写,功能行为模块可以通过综合工具自动地转换为门级互联的结构模块。

Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们所对应的模型可以分为以下5种:

  • 系统级(system-level):用语言提供的高级结构能够实现待设计模块的外部性能的模型。
  • 算法级(algorithm-level):用语言提供的高级结构能够实现算法运行的模型。
  • RTL级(register-level):描述数据在寄存器之间的流动和处理,控制这些数据流动的模型。

以上三种都属于行为描述,只有RTL级才有与逻辑电路有明确的对应关系。

  • 门级(gate-level):描述逻辑门以及逻辑门之间连接的模型。
  • 开关级(switch-level):描述器件中三极管和存储节点以及它们之间连接的模型。

Verilog模块的基本概念

从下面的一个二选一多路选择器了解Verilog模块的特性。

示例1:

module muxtwo(out,a,b,sl)input a,b,sl;output out;reg out;always@(sl or a or b)if (! sl) out = a;else out =b;
endmodule

示例2:

module muxtwo(out,a,b,sl)input a,b,sl;  //输入信号名output out;        //输出信号名wire nsl,sela,selb;    //定义内部连线assign nsl = ~sl;//阻塞赋值assign sela = a&nsl;    //求反assign selb = b&sl;        //按位与运算assign out = sela|selb;    //按位或运算
endmodule

wire型变量赋值表示某个逻辑输出连接到这个线上面了

wire型变量,体现了Verilog结构描述的部分。

示例3:

module muxtwo(out,a,b,sl)input a,b,sl;output out;not         u1(nsl,sl);and      #1  u2(sela,a,nsl);and      #2  u3(selb,b,sl);or        #3  u4(out,sela,selb);
endmodule

把示例1或者示例2转换为示例3的过程称为综合,示例3很容易跟某种工艺基本元件对应起来。

后续需要理解的部分:

  • 符合何种风格的Verilog模块是可以综合的
  • 何种风格的模块是不可以综合的
  • 不可以综合的Verilog模块有什么作用等

前面讲过,综合后产生门级电路网表

示例4:3bit加法器

module adder(cout,sum,a,b,cin);input [2:0] a,b;//[MSB:LSB],所以是3bitinput cin;output cout;output [2:0] sum;assign {cout,sum} = a+b+cin;//{,}是什么运算符?起拼接的作用 如 a = {b[5],b[4:0]},意思为 b的最高位和b的低五位拼接起来,组成的a为6位
endmodule

示例5:2bit数比较器

module compare(equal,a,b);output equal;input [1:0] a,b;//[MSB:LSB],所以是2bitassign equal = (a==b)?1:0;/*如果a、b两个输入信号相等,输出为1,否则为0*/
endmodule

Verilog用于模块的测试

Verilog还可以用于描述变化的测试信号,描述测试信号的变化和测试过程的模块也称为测试平台(testbench或testfixture),它可以对上面介绍的电路模块(无论是行为的或者结构的)进行全面的测试。通过观测被测试模块的输出信号是否符合要求,可以调试和验证逻辑系统的设计和结构正确与否,并及时发现问题修改。

测试可以在功能(即行为)级上进行,也可以在逻辑网表(逻辑布尔表达式)和门级结构级上进行。它们分别称为前(RTL)仿真、逻辑网表仿真和门级仿真。如果门级结构模块和具体的工艺技术结合起来,并加上布局布线引入的延迟模型,此时进行的仿真称为布线后仿真,这种仿真与实际电路情况非常接近。

小结

  1. Verilog HDL程序是由模块构成的,每个模块的内容都是位于module和endmodule两个语句之间的。每个模块实现特定的功能。
  2. 模块是可以进行层次嵌套的,正因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能。
  3. 如果每个模块都是可以综合的,则通过综合工具可以把它们的功能描述全部转换为最基本的逻辑单元描述,最后可以用一个上层模块通过实例化引用把这些模块连接起来,整合成一个很大的逻辑系统。
  4. Verilog模块可以分为两种类型:一种是为了让模块生成电路的结构,一种是为了测试所设计电路的逻辑功能是否正确。
  5. 每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行描述。
  6. Verilog HDL程序的书写格式自由,一行可以写多个语句,一个语句也可以分写多行。
  7. 除了endmodule语句外,每个语句和数据定义的最后必须有分号。
  8. 可以用/**/和//进行程序的注释,增强程序的可读性。

 

Verilog数字系统教程学习——Verilog语法的基本概念相关推荐

  1. [转]Verilog数字系统设计教程(大连理工一博士学习笔记)

    写在前面 学习Verilog HDL有一些时间,大概一年前的的这个时候开始的吧,从一点都不懂开始学,主要还是看夏宇闻老师的这本书入的门--<Verilog数字系统设计教程>,书写的特别好. ...

  2. verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第三章)

    <Verilog数字系统设计教程>夏宇闻 第三版思考题 答案合集 : Verilog学习系列 第三部分 1.模块由几个部分组成?   由描述接口和描述逻辑功能两部分组成. 2.端口分为几种 ...

  3. verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十四章)

    <Verilog数字系统设计教程>夏宇闻 第三版思考题 答案合集 : Verilog学习系列 第三部分 1.用带电平敏感列表触发条件的always 块表示组合逻辑时,应该用哪一种赋值?   ...

  4. verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第五章)

    <Verilog数字系统设计教程>夏宇闻 第三版思考题 答案合集 :个人主页verilog专栏中 1.为什么建议在编写Verilog模块程序时,如果用到 if 语句建议大家把配套的else ...

  5. Verilog数字系统基础设计-数据转换器

    绪论 在一些应用中,两个电路模块交界处,一个电路模块的输出数据位宽大于另一个模块的输入数据位宽,此时需要进行数据转换.例如,在SATA控制器中,内部数据位宽为32比特,但是与外部物理收发器PHY的接口 ...

  6. Verilog数字系统基础设计-LFSR

    Verilog数字系统基础设计-LFSR 引言 LFSR(线性反馈移位寄存器)用于产生可重复的伪随机序列PRBS,该电路由n级触发器和一些异或门组成.在每个时钟周期内,新的输入值会被反馈到LFSR内部 ...

  7. Verilog数字系统基础设计-扰码与解扰

    Verilog数字系统基础设计-扰码与解扰 扰码可以对原始的用户数据进行扰乱,得到随机化的用户数据.发送电路在发送数据前先对数据进行随机扰乱,接收电路使用相同的扰乱算法重新恢复出原始的数据. 什么是扰 ...

  8. Verilog数字系统设计教程[第4版]夏宇闻——第三部分练习十二

    Verilog数字系统设计教程[第4版]夏宇闻--第三部分练习十二 测试仿真流程 模块源代码 测试模块代码 测试仿真流程 测试仿真环境为win系统下的quartus prime + modelsim ...

  9. Verilog数字系统设计教程[第4版]夏宇闻——第三部分练习四

    Verilog数字系统设计教程[第4版]夏宇闻--第三部分练习四 测试仿真流程 模块源代码 测试模块代码 结果波形 测试仿真流程 测试仿真环境为win系统下的modelsim 模块源代码 //---- ...

最新文章

  1. 读写位宽不同的FIFO,数据输入输出顺序是怎么样的?BRAM又如何呢?
  2. Chrome之排序问题
  3. 最新「Nature Index中国」出炉:北大领跑50所国内顶级研究机构
  4. swift:打造你自己的折线图
  5. FATE框架安装后测试报错:ModuleNotFoundError: No module named ‘arch‘
  6. 如何让隐藏在大数据背后的价值发挥出来?
  7. 自动化运维之kickstart自动化部署安装操作系统
  8. IIS网站的应用程序与虚拟目录的区别及应用
  9. Docker的镜像操作命令
  10. 婚恋职场人格-张晓文-武汉理工大学-中国MOOC-亲密关系测试题参考答案
  11. python-jieba库
  12. c++ 调用meshlab程序慢_从Meshlab学架构
  13. 喜讯!云效度量能力获信通院先进级评估
  14. 2019上半年软考 | 报名时间汇总(持续更新中)
  15. (干货)备战2021年软考中级网络工程师-04知识产权与标准化
  16. pyká Unlimited for Mac(项目管理软件)
  17. 转载 javascript联动菜单
  18. matlab滤波器滤除低频直流信号,对低频信号的滤波的方法
  19. 最近‘张同学’在DY实在是太火了,忍不住用Python分析了一下他的dy评论数据,相信有朝一日我也能够爆火起来
  20. Python:下载和安装Pygame

热门文章

  1. 邮件代收代发软件操作说明
  2. 我决定,开hard模式
  3. 关于IE下复选框的样式问题
  4. AttributeError: ‘Dataset‘ object has no attribute ‘value‘--H5py的历史遗留问题
  5. three.js笔记2--两点画线
  6. Java代码实现简单的画板
  7. python基础代码汇总
  8. 基于阿里云容器镜像服务加速K8S镜像下载
  9. linux http查看网页,【Linux C/C++】 第09讲 HTTP协议与浏览器显示网页
  10. 独秀日记:咱朋友圈的微商大佬比怨妇多,总是更好一点的,对吧