verilog base 做一个按键与LED电路模块仿真
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
在波形图的框中
ctrl+g可以给模块进行分组
模块从左到右向着模块里边的是输入 从右到左向着模外边是输出
波形的放大缩小 ctrl+鼠标滚轮
缩短波形模块名 tool- wave window preferences-display
代码修改之后重新编译 波形框要复位
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)