- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字电路CPLD实验_Verilog HDL语言的熟悉
实验一 Verilog HDL语言的熟悉
实验目的
(1)熟悉使用Quartus II 7.2开发环境。
(2)熟悉基本的Verilog HDL语法及编程。
实验环境
(1)每2位同学为1组,每组一台PC机、一台DP-MCU/Altera实验仪。
(2)配套的软硬件设备:并口JTAG下载线、Quartus II 7.2安装程序等。
实验内容
一、学习以下例程:
module muxtwo(out, a, b, s1);
input a, b, s1;
output out;
reg out;
always @ (s1 or a or b)
if( !s1 ) out = a;
else out = b;
endmodule
以上程序段完成了二选一数据选择器,从以上例程扩展学习Verilog HDL语言的基本语法。
二、Verilog HDL语言基本语法的学习:
(1)数据常量
-- Verilog HDL中共有19种数据类型。
1 数字
整数
二进制数(b或B)
十进制数(d或D)
十六进制数(h或H)
八进制数(o或O)
数字的三种表达方式:
位宽进制数字 --- 全面的描述方式
进制数字 --- 默认位宽,至少32位
数字--- 默认位宽与进制(十进制)
examples:
88ha2
x 与 z
-- x代表不定值;z(?)代表高阻值
examples:
4b10x0
4b101z
12dz
12d?
8h4x
负数
-- 在位宽表达式前加一个减号(-),减号必须放在数字定义表达式的最前面。
examples:
-8d5 //ok
8d-5 //not ok!!!
下划线
-- 用来分割数字的表达,提高程序的可读性,只能用在具体的数字之间。
examples:
16b1010_1111_1001_0001 //OK
8b_1001_1111 // not ok!!!
note:常量不说明位数的时候,默认为32位,每个字母用8位的ASCII码值表示
2 参数型(parameter)
-- 用parameter来定义常量,称为符号常量,可提高程序的可读性与可维护性。
格式:
parameter 参数名1 = 表达式,参数名2 = 表达式,... ,参数名n = 表达式;
note:表达式必须是常数表达式!!
举例:
parameter msb = 7;
parameter byte_size=8,byte_msb=byte_size-1;
note:parameter所定义的常量必须是值可以确定的。
(2)变量类型
1. wire型
- 常用来表示用于以assign关键字指定的组合逻辑信号
- 默认的类型
wire a; // 1个1位
wire[7:0] b; //1个8位
wire[4:1] c,d; //2个4位
2. reg型
-- 存储数据单元的抽象
-- always块内被赋值的每一个信号都必须为reg型(reg只表示被定义的信号将用在alway块内)
-- 默认初始值为不定值:x
reg rega;
reg[3:0] regb;
reg[4:1] regc,regd;
3. memory型
-- 通过对reg型变量建立数组,用于对存储器建模
reg[7:0] mega[255:0];
-- mega存储器,有256个8bit单元,地址范围为0~255
思考:reg[n-1:0] rega; 与 reg mega[n-1:0]的区别??
(3)结构说明语句
verilog HDL语言中的任何过程模块都从属于以下4种结构的说明语句:
- initial //开始时立即执行,且只执行一次
- always //开始时立即执行,直到仿真介绍
- task
- function
//task和function语句可以在程序模块中的一处或多处调用
(3.1)always语句
- 仿真过程中不断活跃着
- 其后的过程快是否执行取决于它的触发条件是否满足
声明格式
always 时序控制 语句
note: always语句需要时序控制配合,否则会出现仿真死锁。
例1
always areg = ~areg;
//零延迟的无限循环跳变
例2
always #10 areg = ~areg;
//周期为20的无限延续信号
例3
reg[7:0] counter;
ret tick;
always @ (posedge areg) //上升沿激励
begin
tick = ~tic
文档评论(0)