verilog base 做一个按键与LED电路模块仿真

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 

 

在波形图的框中 

ctrl+g可以给模块进行分组

模块从左到右向着模块里边的是输入 从右到左向着模外边是输出

波形的放大缩小 ctrl+鼠标滚轮

缩短波形模块名 tool- wave window preferences-display

代码修改之后重新编译 波形框要复位 

posted @   涛大林  阅读(293)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示