FPGA开发中一共就两个类型 wire, reg
input一定都是线型的 设定位宽 1位位宽可以不设定,默认就是一位的。
output可以是reg型 也可以是wire型
两个可综合语句 assign , always语句
reg在always语句下编程 wire在assign语句下编程
testbench 测试激励模块
新建一个sim仿真文件 不和设计模块一个文件夹
激励文件不可以综合 即不能生成真正的下载到fpga内部的电路 (称激励文件OR行为及描述文件)
语法 时间单位声明
代码示例
`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