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 

verilog base

上一篇:git常用命令梳理总结


下一篇:JavaScript概念之screen/client/offset/scroll/inner/avail的width/left 分类: JavaScript HTML+CSS 2015-05-27 16:42 635人阅读 评论(0) 收藏