verilog base
作者:互联网
FPGA开发中一共就两个类型 wire, reg
input一定都是线型的 设定位宽 1位位宽可以不设定,默认就是一位的。
output可以是reg型 也可以是wire型
两个可综合语句 assign , always语句
reg在always语句下编程 wire在assign语句下编程
testbench 测试激励模块
新建一个sim仿真文件 不和设计模块一个文件夹
激励文件不可以综合 即不能生成真正的下载到fpga内部的电路 (称激励文件OR行为及描述文件)
语法 时间单位声明
#后边跟着的是延时 1ns/1ns #1表示延时1ns #1.1错误 因为精度为1ns。当1ns/100ps 可以#1.1 当1ns/1ps 可以#1.111代码示例 `timescale 1ns/1ns //`timescale 表示的是时标,后面的表示单位/精度【模块里边调用的时间的单位/时间的精度】 module tb_key_ctrl_led();//测试模块不需要定义端口 测试激励(顶层)没有连接外部,没有接口。不是顶层都没有接口 reg key1;//内部变量只需要定义变量类型和名称,不需要定义方向 产生激励(输入)reg 在always语句下 reg key2;//变量类型定义只与变量的赋值方式有关 wire led; //always 是一种赋值方式,#10 表示延时 10 个时间单位 always #10 key1 = {$random}; 每过10ns赋值 //$random 是一个随机函数,可以用来取一个随机数,{}是取绝对值 always #15 key2 = {$random}; //模块实例化,两个模块之间的信号传递的唯一方式 key_ctrl_led key_ctrl_led_inst( .key1(key1),//()前面的是功能模块的端口,()里面的是测试模块里面的变量 例化 .key2(key2),//()里面的变量名可以与前面的名称一致,也可以不一致 .led (led ) //需要跟这个模块内部定义的名称一致 ); endmodule
画框图是被激励的文件在testbench里边 称之为例化
右键文件名 instantiate module 按键 可复制到testbench里边直接例化 就是一行不好看 。。
自己写也行
前边是和被激励文件一个名字,后边是例化的名字 可自定义
模块里边的是输入 可以是reg也可以是wire 里面是输入 只能是wire 例如wire led
=============================================================================
modelsim
file -new -project -add to project -existing file
添加 编译
从testbench文件 最顶层开始仿真
切换到library选项卡
work-tb_key_ctrl_led-simulate
选择key1 key2 led add wave
标签:wire,led,1ns,always,base,verilog,模块,reg 来源: https://www.cnblogs.com/lht-learning/p/15015925.html