September 16, 2016
作者:dengshuai_super
出处:http://blog.csdn.net/dengshuai_super/article/details/52557422
声明:转载请注明作者及出处。


可综合文件放到design文件夹下,testbench文件放到sim文件夹下(文件夹名可自定义)

//ex_module.v
module ex_module(input   wire                 sclk,input   wire             rst_n,input   wire  [7:0]  d,//声明模块的时候,输入一定是wire变量output  reg   [7:0]  q//声明模块的时候,输出可以是wire变量也可以是reg;reg变量必须在always块里面赋值
);//接口列表
//异步的D触发器
always @(posedge sclk or negedge rst_n)    //括号里面是敏感列表,可以包括电平触发或者沿触发//寄存器发生变化或翻转就是由CLK(让D触发器翻转)或CLR(复位端让寄存器清零)if(rst_n == 1'b0) //if后面的括号里是条件表,这里是组合逻辑。"=="声明一个比较器,"1"指的是1比特、"’"用来区分阿拉伯数字和进制,"b"代表的进制binary,“0”是一个比特的0q<=8'h00;            //10'b00000_00000  10'd10  10'hff,沿触发的逻辑里边一定都用<=非阻塞赋值。elseq<=d;同步
//always @(posedge sclk)//同步的时候sclk在上升沿的时候,检测到低电平;异步的时候,当rst_n出现下降沿的时候,寄存器复位
//        if(rst_n == 1'b0)
//              q<=8'h00;
//        else
//              q<=d;endmodule

//ex_wire.v
module ex_wire(input  wire sel,input  wire a,input  wire b,output wire c
);//always 对reg赋值,assign语句(连续赋值)对wire赋值
//wire 变量一定用assign连续赋值语句赋值,而且必须是用阻塞赋值
assign c=(sel == 1'b1)?a:b;//(条件)?条件为1:条件为0
/*if(sel == 1'b1)c =a;elsec =b;
*/
endmodule

//ex_cnt.v
module ex_cnt(input wire sclk,//模拟晶振产生时钟震荡input wire rst_n,//模拟外部复位电平testbenchoutput wire [9:0] cnt
);
reg [9:0] cnt_r;//定义一个寄存器变量"r"代表regalways @ (posedge sclk or negedge rst_n)if(rst_n == 1'b0)cnt_r <= 10'd0;//"'d0"直接返回32位的0,截取低10位给cnt_r,1023+1=1024elsecnt_r <= cnt_r + 1'b1;//0---1023-0---1023
assign cnt =cnt_r;
//仿真工具modelsim
//链接:http://pan.baidu.com/s/1qW5IhhM 密码:n28z
endmodule//请参考verilog数据常量
//数字表达式:<位宽><进制><数字>
//'b:二进制    //eg.4'b1110  表示4位二进制数1110
//'h:十六进制 //eg  8'hef、4’ha等
//'d:十进制    //eg   2'd3、4‘d15(不能写16,4位宽最大15)等
//
//所以10’d0表示10位宽的数值0,0000000000
//加入10‘d15,则表示十进制15 ,0000001111
//tb_ex_cnt.v//声明延时单位,1ns指的是单位,100ps(0.1ns)指的是时标的精度。
//例如:#10.11--->10.10(最后的10ps精度被忽略)
`timescale 1ns/100ps   module tb_ex_cnt;//这是完整的顶层,没有输入输出接口reg  tb_sclk,tb_rst_n;wire [9:0]  tb_cnt;initial//一上电只被执行一次,在initial这个块里面只能被寄存器变量赋值begin//在testbench里面begin、and是顺序执行的;在可综合模块里面begin、and就是一个括号tb_sclk <=0;tb_rst_n<=0;//它俩有先后顺序,先是tb_sclk被赋值然后再是tb_rst_n被赋值。但是之间的延迟是0。#200.1tb_rst_n<=1;end
always #10 tb_sclk <= ~tb_sclk;//例如初始状态是0,过了10ns变成1,又保持10ns变成0,周而复始的进行翻转。于是产生了时钟和复位信号//例化的方法
//原始模块名字 例化的名字(可以自定义)
ex_cnt ex_cnt_inst(.sclk  (tb_sclk),//模拟晶振产生时钟震荡.rst_n (tb_rst_n),//模拟外部复位电平testbench;例化模块的时候如果原始模块是输入信号,那么括号内可以是wire变量也可以是reg变量.cnt   (tb_cnt) //例化模块的时候如果原始模块是输出信号,那么括号内必须是wire变量(正好和可综合模块相反)
);
endmodule

例化时,变量的赋值应该遵循下图(按照自己理解画的,不一定正确,欢迎指正):
Design中的模块输出的时候可以作为寄存器,它相当于把输出寄存器的Q端直接连接到输出口了,就把中间那根线给省略了;
Testbench中输出变量必须是wire类型,因为芯片画PCB时,输出的管脚都用线连。

打开ModelSim--->File--->new--->Project--->Project Name:ex_cnt(自定义,别写中文);路径:D:\VivadoProjects\FPGA_From_e_to_c\ex_1\sim(根据你文件的路径写)
--->在Project标签页下右键--->Add to Project--->Existing File--->将ex_cnt.v,tb_ex_cnt.v加进来--->Compile All--->数据编译到Library标签页的work下
--->右键tb_ex_cnt--->Simulation without Optimization--->右键ex_cnt_inst,Add Wave--->

如图所示:

在Wave 页面下,如果左侧信号栏变量名带路径,可以在Tools--->Window Preferences--->Display Signal Path改为1即可。
然后在Wave页面设置运行时间:这里设置100us--->点击Run--->在左侧右击变量--->Radix--->选择显示的进制。

Verilog中wire与reg类型的区别:
http://blog.csdn.net/changhaizhang/article/details/6933806


来源:
https://ke.qq.com/user/index/index.html#cid=66019&term_id=100056181

Verilog语法_1(reg、wire、always语法)相关推荐

  1. (17)Verilog时钟与复位激励-基本语法(五)(第4天)

    (17)Verilog时钟与复位激励-基本语法(五)(第4天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)Verilog时钟与复位激励-基本语法(五)(第4天 ...

  2. SystemVerilog中logic var reg wire的区别

    在Verilog中,所有的线网和变量都是使用四态值,因此没必要也不能清晰的区分信号类型. 为了增强灵活性,SystemVerilog中定义信号同时具有类型和数据类型两个属性. 类型指示信号是属于线网( ...

  3. Linux下的ATT语法(即GNU as 汇编语法)入门

    学习这么长时间,一直在C语言这一层面上钻研和打拼,日积月累,很多关于C的疑惑在书本和资料中都难以找到答案.程序员是追求完美的一个种群,其头 脑中哪怕是存在一点点的思维黑洞都会让其坐卧不宁.不久前在it ...

  4. 【Groovy】Groovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )

    文章目录 一.字符串切割 1.使用 Java 语法切割字符串 2.使用 Groovy 语法切割字符串直接为变量赋值 3.数组赋值给变量 变量个数小于等于数组长度 二.完整代码示例 一.字符串切割 在 ...

  5. JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  6. (11)Verilog HDL变量:wire型

    (11)Verilog HDL变量:wire型 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL变量:wire型 5)结语 1.2 FPGA简介 F ...

  7. easypoi 语法_高考阅读amp;语法填空amp;完型amp;词汇amp;句型amp;翻译amp;语法 系列大合集 找资料不愁了...

    阅读高考英语阅读理解100篇高中英语阅读理解各大题型+解题技巧,非常实用! 语法填空 1高考英语语法填空题考点分析与解题技巧 22020高考语法填空练习11套 3"语法填空+短文改错&quo ...

  8. lr 1 语法分析器c语言,LR语法分析器

    1 LR语法分析器 本节介绍一个有效的自底向上的分析技术,可以用于一大类上下文无关文法的语法分析.这种技术叫做LR(k)分析法,其中L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程,k指的是在 ...

  9. easypoi 语法_语法微课初中英语语法复习大全

    关注星标英语导学,每天与你相约中考语法微课 (点击标题观看) 英语句式的讲解微课(一) 英语句式的讲解微课(二) 时态语态微课(一) 时态语法微课(二) 初中英语时态教学微课视频 及物动词与不及物动词 ...

最新文章

  1. C++11语言新特性-《C++标准库(第二版)》读书笔记
  2. 微信分享时,描述内容怎么换行
  3. 重磅!浙大博士两破世界纪录,三年两获浙大竺可桢奖学金!
  4. .Net中EF通用数据层小结
  5. 如何整理MacOS的菜单栏图标
  6. api wke_GitHub - kertL/wke: 基于Webkit精简的纯C接口的浏览器内核,可用于桌面UI、浏览器。...
  7. java 使用poi导出excel柱状图
  8. python公式_python公式大全
  9. mysql 本月老客户次月留存率_用mysql计算用户留存率
  10. 等额本息公式推导------玩一下等比数列
  11. 测向交叉定位matlab,一种三维多站测向交叉定位算法
  12. 发热内衣的优势在哪里
  13. Gamma.app:由AI驱动,一种呈现想法的新媒介
  14. 全国应用计算机水平考试,全国计算机应用水平考试
  15. linux查看气质系统文件命令,气质_ITPUB博客
  16. classloder
  17. 入门漏洞:CVE-2022-29464 WSO2文件上传
  18. 华为云HDFS编程实践学习笔记(二)
  19. CGAL:学习CGAL
  20. 2019叮当猫双11店铺预售统计

热门文章

  1. 惠普硬盘测试工具_短DST未通过,图文详解惠普笔记本如何检测硬盘
  2. Applet中签名与未签名代码的混合使用带来的问题
  3. 手机邮箱怎么弄_安卓手机如何接收邮件 教你安卓手机邮箱设置方法
  4. 国家气象局天气预报城市及城市代码
  5. Flutter开发日常练习-pageview滑动视图动画
  6. 有限责任公司破产清算程序有哪些
  7. python在哪下载安装,python软件在哪下载
  8. Origin C调用NAG库
  9. 大三了,软件工程专业女生能走哪个方向呢?
  10. 张艾迪(创始人):23岁天才的创业史