1概述

Verilog HDL是一种用于数字逻辑电路设计的硬件描述语言,可用来进行数字电路的仿真验证、时序分析、逻辑综合。

  • 用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。

  • Verilog HDL既是一种行为描述语言,也是一种结构描述语言。

  • 既可以用电路的功能描述,也可以用元器件及其之间的连接来建模。


2模块 Module

模块(module)是Verilog的基本单位,除了编译指令,其他所有的设计代码都必须放在一个或多个模块中。对模块的描述可以是任意的,可以是行为描述、数据流描述或结构描述。

格式:

module <模块名-对应功能>(input  <端口>,output <端口>);
...
<模块内容>
...
endmodule

一个模块内部可以使用其他模块,称为实例。上层模块可以引用底层人意层次模块的变量。

格式:

  1. 信号名关联法(多用)

<实例名rtl>  <第二层实例名>.(变量名-tb)  //.表示索引

b. 位置关联法

//信号名关联法
sort4 sort4_tb(.ra(ra),.rb(rb),.rc(rc),.rd(rd),.a(a),.b(b),.c(c),.d(d)
);
//位置关联法
sort4 sort4_tb_u(a,b,c,d,ra,rb,rc,rd);

拿二选一举例,子模块为mux2to1,基本单元为u_mux2to1:

  1. 信号名关联法

mux2to1 u_mux2to1(.out(u_out),.a  (u_a),.b  (u_b),.sel(u_select));
  1. 位置关联法

mux2to1 u_mux2to1(a,b,sel,out);

3模块总结

  1. Verilog HDL中的标识符可以是任意一组字母、数字、$和下划线_组合,区分大小写。但标识符的第一个字符必须是字母或下划线。

  1. Verilog HDL是由模块组成,每个模块嵌套在module与endmodule声明语句之间。模块之间是可以进行层次嵌套的。

  1. 每个Verilog HDL源文件中,只准有一个顶层模块,其他为子模块。

  1. 每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑、数据流、结构描述。

  1. 除了endmodule、begin_end、fork_join语句外,每个语句和数据定义后必须有分号。

  1. 可用/*...*/和//...进行注释。


4二选一模块举例

以二选一来举例,其电路图如下图所示,

列举了3种方式,Type 1 是hdlbits中的原题,

//多路复用器
//---------------------------Type 1:---------------------------
/* Q:Create a one-bit wide, 2-to-1 multiplexer. When sel=0, choose a. When sel=1, choose b. */
module top_module( input   a, b, sel,output  out
); assign out = (sel) ? b : a ; //sel=1 ,out=b; sel=0, out=a;// ***** 信号 = 条件?表达式1:表达式2; *****
endmodule// ---------------------------Type 2: Mux2to1---------------------------
//Choose one of the two channels of data as the output
module mux2to1(input    sel,    //select signial 1:b, 0:a   input    op_a,   //input    op_b,   //output   out     //);reg out_t; //out_t为寄存器,为reg
assign out = out_t;always @(*) begin   //*——组合逻辑(无触发器)if (sel) beginout_t = op_b;endelse beginout_t = op_a;end
end
endmodule// ---------------------------Type 3---------------------------
module mux2to1(input     a     ,input     b     ,input     s     ,output    out);
reg out;   //组合逻辑的reg,不是触发器,仅为组合逻辑的信号always @(s or a or b)begin  //* = 敏感信号列表,表内信号变化,会触发always,执行一次列表(所有电平信号)if (!s) out = a;else out = b;
end
endmodule

5Verilog用于模块的测试

  1. 仿真是什么?为什么进行仿真?

仿真是对电路模块进行动态的全面测试。通过观测被测试信号的输出信号是否符合要求,可用调试和验证逻辑系统的设计和结构准确与否,并发现问题及时修改。

  1. 仿真可以在几层面上进行?每个层面的仿真有什么意义?

仿真有:前(RTL)仿真、逻辑网表仿真、门级仿真和布线仿真;

  • 前(RTL)仿真、逻辑网表仿真、门级仿真:可以调试和验证逻辑系统的设计和结构是否准确,并发现问题及时修改;

  • 布线后仿真:分析设计的电路模块的运行是否正常。

  1. 如何检查程序的功能是否正确?

  • 需要有测试激励信号输入到被测模块;

  • 需要记录被测模块的输出信号;

  • 需要把功能和行为描述的Verilog模块转换为门级电路互连的电路结构(综合);

  • 需要对已经转化为门级电路结构的逻辑进行测试(门级电路仿真);

  • 需要对布局布线后的电路结构进行测试(布局布线后仿真)。

在二选一中,

测试信号和测试激励的产生--ain\ bin\ select

被测试模块的测试信号的响应--out

对二选一进行测试:

//always, initial是并行的
// -------------------------1------------------------
module mux2to1_tb();
reg     a        ;  //rtl input
reg     b        ;  //rtl input
reg     select   ;  //rtl input
wire    outw     ;  //rtl outputmux2to1 mux2to1_inst(.op_a(a)        ,.op_b(b)        ,    .sel(select)    ,.out(outw));initial begin  //对输入赋0a       = 0 ;        b       = 0 ;select  = 0 ;clk     = 0 ;
endinitial begin  //产生时钟; 每延时5单位,给clk取反forever #5 clk = ~clk ;
end
/* 产生时钟
always #5 clk =~ clk;
*/always begin   //always @(posedge clk)begin#10 a = {$random}%2 ;#5  b = {$random}%2 ;
endalways #20 select = ~select ;initial begin#200 $stop ;
end endmodule// -------------------------2------------------------
`timescale 1ns/1ps //仿真时间单位/精度module mux2to1_tb();reg     ain, bin, select    ;
reg     clk                 ;
wire    outw                ;  //不写默认wire型 initial begin //0时刻给初值0;initial--只执行一次 ain     =  0  ;bin     =  0  ;select  =  0  ;clk     =  0  ;
end always #10 clk = ~ clk;  // 产生一个时钟波形
/*
forever begin#10 clk = ~ clk ;
end
*/always @(posedge clk)   // 产生ain, bin随机值begin#1 ain = ($random)%2 ;  //模2,0/1#3 bin = {$random}%2 ;  end
endalways #2 select = !select ; //选通信号initial begin#200$finish();
end//例化
mux2to1 mux2to1_inst(.out(outw),.a(ain),.b(bin),.s(select));endmodule

Q. 若不用initial块,是否能产生测试时钟?

可以。产生测试时钟有两种:

//-----------第一种------------
initial begin              //产生时钟; 每延时5单位,给clk取反forever #5 clk = ~clk ;
end
//-----------第二种------------
always #5 clk =~ clk;         //每延时5单位,给clk取反

以上均为本人学习笔记,若有错误请及时纠正。

Verilog语法-模块module[Day2学习笔记]相关推荐

  1. DMU软件 语法高亮 vim设置--学习笔记6

    用vim编程时, DMU的关键词没有语法高亮, 看着不舒服, 就进行一下设置, 并记录过程. 设置的效果如下 设置流程 本次设置的比较简单, 将关键词分为: 模型model, 比如DMU1, DMU2 ...

  2. Vue.js 基础语法 入门语句 Vue学习笔记 v-model 双向数据绑定

    Vue.js 基础语法,入门语句,Vue学习笔记 学习网站:https://www.bilibili.com/video/BV15741177Eh vue 的体验 响应式:数据一旦改变,视图就会响应改 ...

  3. verilog 移位运算符 说明_Verilog学习笔记基本语法篇(二)·········运算符...

    Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类: (1)算术运算符+,-,*,/,% 优先顺序 !~ *  /   % +    - <<    >& ...

  4. python random模块导入_Python学习笔记(二十)—模块的导入

    一.模块介绍 Python 提供了强大的模块支持,主要体现在Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块.通过这些强大的模块可以极大地提 ...

  5. 微信小程序Day2学习笔记

    学习目标 此笔记参考b站 黑马程序员微信小程序开发视频 D盘有文件写入权限问题,,今天换成了C盘,希望要撑住.. 1.WXML 模板语法 1.数据绑定 的基本原则 在 data 中定义数据 在 WXM ...

  6. Angular Lazy load(延迟加载,惰性加载) 机制和 feature module 的学习笔记

    官网链接 默认情况下,NgModules 是贪婪加载的,这意味着一旦应用程序加载,所有 NgModules 也会加载,无论它们是否立即需要. 对于有很多路由的大型应用程序,可以考虑延迟加载--一种根据 ...

  7. 基础语法和变量day2学习内容

    基础语法和变量 内容: --------基础语法 --------print函数的使用 --------变量 --------数学运算符 --------比较运算符 一.基础语法 注释 单行注释 多行 ...

  8. 潘多拉 IOT 开发板学习(RT-Thread)—— 实验16 WiFi 模块实验(学习笔记)

    本文代码参考 RT-Thread 官方 BSP 文章目录 实验功能 代码剖析 rt_hw_wlan_wait_init_done() LOG_D() rt_wlan_scan_sync() rt_wl ...

  9. 一:c#基本语法(2)(老田学习笔记)

    数组: 代码   //二维数组         String[,] abcd = new string[2, 4];//建立一个2*4的数组         abcd[0, 0] = "田洪 ...

最新文章

  1. 个人--变成星星的孩子
  2. 求助大佬6——1种贪心
  3. 网络编程- 解决黏包现象方案一(六)
  4. 全球及中国甜菊糖苏打水行业营销模式与盈利前景调研报告2022版
  5. python List交集、并集、差集
  6. windows 2008创建群集“xxx”时出错。由于超时时间已过,该操作返回
  7. Java异常处理001:Maven clean package时Failed to clean project: Failed to delete
  8. Redis中的批量删除数据库中的Key
  9. (1)webpack介绍
  10. 关于tomcat5.5或6.0免安装版,点击startup.bat启动自动消失问题
  11. pygame小游戏(接球小游戏)
  12. 【鱼眼镜头3】[鱼眼畸变模型]:除法模型(核密度估计径向失真校正方法)
  13. 完稿—单片机原理与接口技术
  14. linux md5sum 文件夹,linux md5sum 的用法
  15. 仅需6步!虹科教你如何在第三方软件CODESYS中配置PCAN
  16. goldwave教程分享:用GoldWave进行音量调节
  17. css灯箱放大图片,wordpress插件wordpress文章图片放大灯箱效果插件auto-highslide优化版...
  18. 微积分——傅里叶级数
  19. MAC如何查看图片尺寸大小
  20. 设计模式-装饰器模式 C++

热门文章

  1. Jacob处理Word文档总结以及Java操作Office2007
  2. 云服务器修复,云服务器修复
  3. 线性回归算法(涉及最小二乘法、梯度下降法)
  4. 2的负x次幂图像_函数y=2的x次方与y=x的2次方的图象的 – 手机爱问
  5. linux常用-设置代理及IP
  6. 从键盘输入一个正整数,判断它是否为3和5的倍数,如果是,则输入yes,否则输出no。
  7. python从某一行开始读取文本文件
  8. html获取QQ头像接口,JS获得QQ号码的昵称,头像,生日的简单实例
  9. 有了这个开源工具后,明天争取5点钟下班了
  10. opencv 网络摄像头(webcamera)