实验三 verilog HDL中任务与函数的数字系统设计

合集下载

EDA实验06—Verilog HDL中使用函数和任务

EDA实验06—Verilog HDL中使用函数和任务

电子信息工程学系实验报告课程名称:EDA技术与实验在实验项目名称:Verilog HDL中使用函数和任务实验时间:班级:通信091 姓名:Jxairy 学号:实验目的:1.了解函数的定义和在模块设计中的使用。

2.了解函数的可综合性问题。

3.了解许多综合器不能综合复杂的算术运算。

4.掌握任务在Verilog模块设计中的应用。

5.学会在电平敏感列表的always中使用拼接操作、任务和阻塞赋值等语句,并生成复杂组合逻辑的高级方法。

实验环境:Windows 7、MAX+PlusⅡ10、QuartusⅡ等。

实验内容:1.用函数定义8—3编码器的文本设计及仿真。

2.用任务模块进行alutask的文本设计及仿真。

实验过程:一、用函数定义8—3编码器的文本设计及仿真:(试验环境:MAX+PlusⅡ10)(1)新建文本:选择菜单File下的New,出现如图5.1所示的对话框,在框中选中“Text Editor file”,按“OK”按钮,即选中了文本编辑方式。

图6.1 新建文本(2)另存为Verilog编辑文件,命名为“code_83.v”如图5.2所示。

(3)在编辑窗口中输入程序,如图6.3所示。

图6.2 另存为.V编辑文件图6.3 8—3编码器的源程序(4)设置当前文本:在MAX+PLUS II中,在编译一个项目前,必须确定一个设计文件作为当前项目。

按下列步骤确定项目名:在File菜单中选择Project 中的Name选项,将出现Project Name 对话框:在Files 框内,选择当前的设计文件。

选择“OK”。

如图6.4所示。

(5)打开编译器窗口:在MAX—plusⅡ菜单内选择Compiler 项,即出现如图6.5的编译器窗口。

图6.4 设置当前仿真的文本设计图6.5 编译器窗口选择Start即可开始编译,MAX+PLUS II编译器将检查项目是否有错,并对项目进行逻辑综合,然后配置到一个Altera 器件中,同时将产生报告文件、编程文件和用于时间仿真用的输出文件。

Verilog HDL数字设计实训教程第1章 Verilog HDL数字设计实训基础

Verilog HDL数字设计实训教程第1章 Verilog HDL数字设计实训基础

图1-2 按键电路连接图和管脚对应图
1.1 实训平台
4个LED灯:
图1-3 LED电路连接图和管脚对应图
1.1 实训平台
2个数码管:
图1-4 数码管电路连接图和管脚对应图
1块液晶:
1.1 实训平台
图1-5 液晶电路连接图和管脚对应图
1个UART:
1.1 实训平台
图1-6 UART电路连接图和管脚对应图
if(p==N-1) begin p=0; clk_p=~clk_p; end else p=p+1; end always @(negedge clk) begin
if(q==N-1) q=0; else q=q+1;
if(p==(N-1)/2) clk_q=~clk_q; end assign clk_N=clk_p^clk_q; endmodule
图1-39 设置USB硬件端口
QuartusII设计流程
5.引脚锁定和硬件验证
图1-40 下载界面
QuartusII设计流程
5.引脚锁定和硬件验证
图1-41 选择下载文件
QuartusII设计流程
5.引脚锁定和硬件验证
图1-42 led灯闪烁的效果
1.3 分频器设计
分频器电路是非常有用的一种电路, 分频的方法很多,最常见的是利用加 法计数器对时钟信号进行分频。
begin if(p==N/2-1) begin p=0; clk_N=~clk_N; end else p=p+1;
end endmodule
图1-44 任意偶数分频仿真波形
1.3 分频器设计
【例1-5】 可设置参数的任意整数分频器:占空比可变。 module divf_parameter(rst,clk,en,clkout); input rst,clk,en; output clkout; integer temp; //最大值为2的32次方 parameter N=7,M=3; //N为分频系数,M/N为占空比 always @(posedge clk)

使用Verilog HDL进行数字逻辑设计、综合、仿真的步骤及工具软件使用简要说明

使用Verilog HDL进行数字逻辑设计、综合、仿真的步骤及工具软件使用简要说明

使用Verilog HDL进行数字逻辑设计、综合、仿真的步骤及工具软件使用简要说明综合工具使用synplify pro 7.0仿真工具使用modelsim 5.5e (几个菜单排列与5.6有不同,文中有介绍)布局布线工具及时序仿真模型生成使用maxplusII 10.0一.写在开干之前1.涉及到的文件a.源程序(*.v)用户编写的用于描述所需电路的module (可能有多个文件,多个module相互调用)如果用于综合,则源程序内用于描述的V erilog语言必须是可综合风格的。

否则将只能做功能仿真(前仿真),而不能做综合后的仿真和时序仿真(后仿真)。

b.综合后的V erilog HDL 模型(网表) (*.vm)用综合工具synplify对a 进行综合后生成的电路的V erilog HDL 描述。

由synplify自动生成(必须在Implementation Option —Implementation results选项中选中write mapped verilog netlist后才会生成vm文件)。

此文件用于作综合后的仿真c.布局布线后生成的时序仿真模型(网表) (*.vo)文件使用maxplusII对设计进行布局布线之后,生成的带有布局布线及具体器件延迟特性等参数的电路模型的V erilog HDL描述。

要让maxplusII生成vo文件,必须在maxplusII的compile interface中选中verilog netlist writer。

此文件用于作时序仿真(后仿真)d.测试文件(*.v或*.tf)用户编写的V erilog HDL源程序。

用于测试源程序(a,b,c)中所描述电路。

在测试文件中调用被测试的module,生成被测点路所需的输入信号。

所用V erilog HDL语句不需要是可以综合的,只需语法正确。

如果被测试的模型为a,则对应的仿真为前仿真(功能仿真)如果被测试的模型为b, 则对应的仿真为综合后仿真如果被测试的模型为c, 则对应的仿真为后仿真2.强烈建议a.在写用于综合的源程序时,一个源程序文件里只写一个moduleb.源程序文件名与其内所描述的module名相同(如module myadder 文件名myadder.v)c.为了方便管理文件,为每一个设计都单独创建一个目录,目录内创建source, test子目录分别用于存放源程序(用于综合的)和测试文件。

数字系统设计与Verilog HDL

数字系统设计与Verilog HDL

数字系统设计与Verilog HDL(复习)EDA(Electronic Design Automation)就是以计算机为工作平台,以EDA软件工具为开发环境,以PLD器件或者ASIC专用集成电路为目标器件设计实现电路系统的一种技术。

1.电子CAD(Computer Aided Design)2.电子CAE(Computer Aided Engineering)3.EDA(Electronic Design Automation)EDA技术及其发展p2EDA技术的应用范畴1.3 数字系统设计的流程基于FPGA/CPLD的数字系统设计流程1. 原理图输入(Schematic diagrams )2、硬件描述语言 (HDL文本输入)设计输入硬件描述语言与软件编程语言有本质的区别综合(Synthesis)将较高层次的设计描述自动转化为较低层次描述的过程◆行为综合:从算法表示、行为描述转换到寄存器传输级(RTL)◆逻辑综合:RTL级描述转换到逻辑门级(包括触发器)◆版图综合或结构综合:从逻辑门表示转换到版图表示,或转换到PLD器件的配置网表表示综合器是能自动实现上述转换的软件工具,是能将原理图或HDL语言描述的电路功能转化为具体电路网表的工具适配适配器也称为结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,并产生最终的可下载文件对CPLD器件而言,产生熔丝图文件,即JEDEC文件;对FPGA器件则产生Bitstream 位流数据文件p8仿真(Simulation)功能仿真(Function Simulation)时序仿真(Timing Simulation)仿真是对所设计电路的功能的验证p9编程(Program)把适配后生成的编程文件装入到PLD器件中的过程,或称为下载。

通常将对基于EEPROM工艺的非易失结构PLD器件的下载称为编程(Program),将基于SRAM 工艺结构的PLD器件的下载称为配置(Configure)。

Verilog数字系统设计-课程设计报告

Verilog数字系统设计-课程设计报告

Verilog HDL数字系统设计课程设计课题:RISC_CPU设计与验证第一章:RISC_CPU概述(51.1课题的由来和设计环境介绍(5 1.2什么是CPU (5第二章:RISC_CPU结构(62.1 RISC_CPU整体结构(62.2 时钟发生器(72.2.1 时钟发生器的介绍(72.2.2 时钟发生器symbol(82.2.3 时钟发生器RTL(82.2.4 时钟发生器源代码(82.2.5 时钟发生器测试代码(92.2.6 时钟发生器仿真波形(10 2.3指令寄存器(102.3.1 指令寄存器介绍(102.3.2 指令寄存器symbol(112.3.3 指令寄存器RTL(112.3.4 指令寄存器源代码(11 2.3.5 指令寄存器测试代码(122.3.6指令寄存器仿真波形(13 2.4 累加器(132.4.1 累加器介绍(132.4.2 累加器symbol(132.4.3 累加器RTL(142.4.4 累加器源代码(142.4.5 累加器仿真代码(142.4.6 累加器仿真波形(152.5 算术运算器(152.5.1 算术运算器介绍(152.5.2 算术运算器symbol(162.5.3 算术运算器RTL(172.5.4 算术运算器源代码(182.5.5 算术元算器测试代码(192.5.6 算术运算器仿真波形(20 2.6数据控制器(202.6.1 数据控制器介绍(202.6.2 数据控制器smybol(20 2.6.3 数据控制器RTL(212.6.4 数据控制器源代码(21 2.6.5 数据控制器测试代码(222.6.6 数据控制器仿真波形(22 2.7 地址多路器(222.7.1地址多路器介绍(222.7.2 地址多路器smybol(232.7.3 地址多路器RTL(232.7.5 地址多路器测试代码(232.7.6 地址多路器仿真波形(24 2.8程序计数器(242.8.1 程序计数器介绍(242.8.2 程序计数器symbol(25 2.8.3 程序计数器RTL(252.8.4 程序计数器源代码(25 2.8.5 程序计数器测试代码(262.8.6 程序计数器仿真波形(26 2.9 状态控制器(272.9.1 状态控制器介器(272.9.2 状态控制器smybol(272.9.3 状态控制器RTL(272.9.4 状态控制器源代码(272.9.5 状态控制器测试代码(282.9.6 状态控制器仿真波形(29 2.10状态机(292.10.1状态机的介绍(292.10.2 状态机symbol(302.10.3 状态机RTL(302.10.4状态机源代码(312.10.5 状态机测试代码(352.10.6 状态机仿真波形(362.11 CPU内核模块的整合(362.11.1 CPU内核原理图(362.11.2 CPU内核smybol (37第三章:CPU外围模块的设计(37 3.1 地址译码器(373.1.1 地址译码器介绍(373.1.2 地址译码器smybol(373.1.3 地址译码器RTL(383.1.4 地址译码器源代码(383.1.5 地址译码器测试代码(383.1.6 地址译码器仿真波形(393.2 RAM (393.2.1 RAM的介绍(393.2.2 RAM smybol(393.2.3 RAM RTL(403.2.4 RAM 源代码(403.2.5 RAM 测试代码(403.2.6 RAM 仿真波形(423.3 ROM (423.3.1 ROM的介绍(423.3.3 ROM的高阻化处理(423.4 I/O模块(433.4.1 I/O模块源代码(433.4.2 I/O模块smybol(443.5 CPU外围模块连接电路原理图(443.6 烧录到FPGA上(45第四章:CPU功能验证(454.1 CPU寻址方式和指令系统(454.2 HLT指令验证(464.3 SKZ指令验证(464.4 ADD指令验证(474.5 AND指令验证(474.6 LDA、STO、JMP指令验证(47第五章:总结(48参考文献: (48第一章:RISC_CPU概述1.1课题的由来和设计环境介绍在本设计课程中,我们通过自己动脑筋,设计出CPU的软核和固核。

VerilogHDL数字系统设计技巧精品PPT课件

VerilogHDL数字系统设计技巧精品PPT课件
module clk ( o_clk, i_clk, rst_n );
output o_clk; input i_clk; input rst_n; parameter N = N_even; // 设置偶数倍分频 parameter M = ?; // M="N/2-1" // bit_of_N: N_even的二进制位宽 reg [(bit_of_N - 1):0] cnt; // 计数器单元 reg o_clk;
cnt <= cnt + 1'b1; end end
恰恰分频:任意整数和小数分频的Verilog实现
// 生成上升沿时钟 // 0~(N/2-1) ↑ -> 1; (N/2)~(N-1) ↑ -> 0 always @ (posedge i_clk, negedge rst_n) begin
if (!rst_n) o_clk <= 0;
偶数分频器的实现非常简单,通过计数器计数 就完全可以实现。 如进行N倍偶数分频,就可以通过由待分频的 时钟触发计数器计数。 当计数器从0计数到N/2-1时,输出时钟进行翻 转,并给计数器一个复位信号,以使下一个时 钟从零开始计数。 以此循环,就可以实现任意的偶数分频。
恰恰分频:任意整数和小数分频的Verilog实现
恰恰分频:任意整数和小数分频的Verilog实现
always@(negedge clk or negedge rst_n) begin if(!rst_n) begin cnt2<=0; end else if(cnt2==2'b10) begin cnt2<=0; end else begin cnt2<=cnt2+1; end end

veriloghdl课程设计

veriloghdl课程设计

veriloghdl课程设计一、课程目标知识目标:1. 理解Verilog HDL的基本语法和结构,掌握数字电路设计的基本原理;2. 学会使用Verilog HDL进行简单的数字电路设计和仿真;3. 掌握Verilog HDL中的模块化设计方法,能够阅读和分析中等难度的Verilog代码;4. 了解FPGA的基本原理,能够将Verilog HDL代码在FPGA开发板上实现硬件编程。

技能目标:1. 能够运用Verilog HDL编写基本的组合逻辑和时序逻辑电路;2. 独立完成简单的数字信号处理系统的设计、仿真和硬件测试;3. 掌握使用Verilog HDL进行代码调试和优化的基本技巧;4. 培养学生的团队合作能力和问题解决能力,能够在项目中进行有效的沟通与协作。

情感态度价值观目标:1. 培养学生对数字电路设计的兴趣,激发学生的创新意识和探索精神;2. 培养学生严谨、细致的学习态度,树立良好的工程伦理观念;3. 增强学生的国家意识,认识到我国在集成电路领域的发展现状和重要性,激发学生的爱国情怀;4. 引导学生树立正确的价值观,认识到科技进步对国家和社会发展的贡献。

本课程针对高年级学生,以项目为导向,注重理论与实践相结合。

在教学过程中,教师需关注学生的学习特点,充分调动学生的主观能动性,培养学生的实际操作能力和创新能力。

课程目标旨在使学生能够掌握Verilog HDL的基本知识和技能,为今后在集成电路设计和开发领域的发展奠定基础。

通过本课程的学习,学生将能够独立完成数字电路的设计和实现,为我国集成电路产业的发展贡献自己的力量。

二、教学内容1. Verilog HDL基础语法:包括数据类型、运算符、赋值语句、控制结构等,对应教材第一章内容;2. 数字电路设计原理:介绍组合逻辑电路和时序逻辑电路设计方法,对应教材第二章内容;3. Verilog HDL模块化设计:学习模块定义、端口声明、模块调用等,对应教材第三章内容;4. 常用数字电路设计实例:分析并实践触发器、计数器、状态机等设计,对应教材第四章内容;5. 仿真与调试技巧:掌握ModelSim仿真工具的使用,学习代码调试和优化方法,对应教材第五章内容;6. FPGA硬件编程:了解FPGA基本原理,学习将Verilog HDL代码烧写到FPGA开发板,对应教材第六章内容;7. 项目实践:分组进行项目设计,包括数字信号处理系统、通信系统等,综合运用所学知识,对应教材第七章内容。

精品课件-Verilog HDL数字系统设计-Verilog HDL数字系统设计-第6章

精品课件-Verilog HDL数字系统设计-Verilog HDL数字系统设计-第6章
function automatic 函数名;
第6章 任务、函数及其他
13
6.2.1 函数的定义 函数的目的是返回一个值,以用于表达式的计算。函数的
语法格式如下:
function <返回值位宽或类型说明> 函数名; 输入端口与类型说明; 局部变量说明; 块语句
endfunction 其中,<返回值位宽或类型说明>是一个可选项,如果缺省,则返回值为一位寄存器类型的 数据。
24
【例6.6】 条件编译举例。
module compile(out,a,b); output out; input a,b; `ifdef add assign out=a+b; `else assign out=a-b; `endif
endmodule
//宏名为 add
第6章 任务、函数及其他
第6章 任务、函数及其他
9
【例6.3】 任务参数传递示例。
module mult(clk, a, b, out, en_mult);
input clk, en_mult;
input [3:0] a, b;
output [7:0] out; reg [7:0] out;
task muotme;
//任务定义
第6章 任务、函数及其他
6
【例6.2】 定义一个完成两个操作数按位与操作的任务, 然后在后面的算术逻辑单元的描述中调用该任务完成与操作。
module alutask(code,a,b,c); input[1:0] code; input[3:0] a,b; output[4:0] c; reg[4:0] c; task my_and;
8'b1xxx_xxxx:code = 3'h7;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三:verilog HDL中任务与函数的数字系统设计班级:通信二班姓名:孔晓悦学号:10082207
作业完成后,以班级为单位,班长或课代表收集齐电子版实验报告,统一提交.
文件命名规则如“通1_王五_学号”
一、实验目的
1、了解verilog HDL任务与函数的定义及格式
2、掌握函数与任务的定义与调用
3、掌握函数与任务在使用时的区别
4、掌握任务与函数的具体应用
二、预习要求
1.复习veirlogHDL行为语句。

2. 预习任务与函数的相关定义和格式要求。

3.简单电路系统设计的流程和方法。

三、实验基本概念
1、任务定义
☐任务定义格式:
task <任务名>;//注意无端口列表
端口及数据类型声明语句;
其它语句;
endtask
☐任务调用的格式为:
<任务名>(端口1,端口2,……);
☐需要注意的是:任务调用时和定义时的端口变量应是一一对应的。

☐注意事项:
●任务的定义与调用须在一个module模块内。

●定义任务时,没有端口名列表,但需要紧接着进行输入输出端口
和数据类型的说明。

●当任务被调用时,任务被激活。

任务的调用与模块调用一样通过
任务名调用实现,调用时,需列出端口名列表,端口名的排序和类
型必须与任务定义中的相一致。

●一个任务可以调用别的任务和函数,可以调用的任务和函数个数
不限。

2、函数定义
☐函数的目的是返回一个值,以用于表达式计算
☐函数的定义格式:
function <返回值位宽或类型说明> 函数名;
端口声明;
局部变量定义;
其它语句;
endfunction
☐<返回值位宽或类型说明>是一个可选项,如果缺省,则返回值为1位寄存器类型的数据。

☐注意事项:
●函数的定义与调用须在一个module模块内。

●函数只允许有输入变量且必须至少有一个输入变量,输出变量由
函数名本身担任,在定义函数时,需对函数名说明其类型和位宽。

●定义函数时,没有端口名列表,但调用函数时,需列出端口名列
表,端口名的排序和类型必须与定义时的相一致。

这一点与任务相

●函数可以出现在持续赋值assign的右端表达式中。

●函数不能调用任务,而任务可以调用别的任务和函数,且调用任
务和函数个数不受限制。

3、例题1 alutask
4、例题2 code_83
4、例题3 funct
四、实验内容
(一)典型习题的验证与仿真
设计要求:
1、指令译码器电路alutask进行调试和仿真。

2、将函数的两个例题83译码器和斐波拉切数计算的例题进行调试和仿真。

3、通过三个例题,掌握任务和函数的定义格式,使用的方法。

代码:
module alutask(opcode,a,b,c);
input [1:0] opcode;
input [7:0] a,b;
output reg [8:0] c;
always @(a or b or opcode)
begin
case(opcode)
2'b00:my_and(a,b,c);
2'b01:c=a|b;
2'b10:c=a-b;
2'b11:c=a+b;
default :c=9'bx;
endcase
end
task my_and;
input [7:0] my_a,my_b;
output [7:0] my_c;
integer i;
for(i=0;i<=7;i=i+1)
my_c[i]=my_a[i]&my_b[i];
endtask
endmodule
仿真结果:
(二)函数与任务练习1---指令译码电路设计
设计要求:
1、在“三、实验基本概念”中例题1,进行改进。

在目前4个分支的基础上增加两个分支,完成a*b的功能,利用移位相加的形式计算,两个分支分别用任务和函数设计。

2.QuartusII进行功能仿真,验证设计的正确性。

4、过程和结果(后面继续添加)
将在程序编辑、编译过程中的错误进行记录(截图或者文本),并错误指出来
(1)编译过程出现的问题总结
错误提示(系统提示)解决方法
错误1
错误2
……..
(2)代码与仿真结果(结果截图)
代码:
module code_83(din,dout);
input[7:0] din;
output [7:0] dout;
function [2:0] code;
input [7:0] din;
casex (din)
8'b1xxx_xxxx : code = 3'h7;
8'b01xx_xxxx : code = 3'h6;
8'b001x_xxxx : code = 3'h5;
8'b0001_xxxx : code = 3'h4;
8'b0000_1xxx : code = 3'h3;
8'b0000_01xx : code = 3'h2;
8'b0000_001x : code = 3'h1;
8'b0000_000x : code = 3'h0;
default :code = 3'hx;
endcase
endfunction
assign dout = code(din);
endmodule
仿真结果:
(三)任务与函数练习2---带7段管输出1位bcd码加法电路
设计要求:
1、参考例题2,设计一个数字电路完成2个1位bcd码加法,输出为七段管。

2、参考例题2和上次试验的7段管译码电路,分别用任务和函数定义7段管的译码电路实
现电路设计。

3.QuartusII进行功能仿真,验证设计的正确性。

4、过程和结果(后面继续添加)
将在程序编辑、编译过程中的错误进行记录(截图或者文本),并错误指出来
(1)编译过程出现的问题总结
错误提示(系统提示)解决方法
错误1
错误2
……..
(2)代码与仿真结果(结果截图)
代码:
module funct(clk,n,result,reset);
output [31:0] result;
input [3:0] n;
input clk,reset;
reg [31:0] result;
always @(posedge clk)
begin
if(!reset) result <=0;
else begin
result <= 2 * factorial(n);
end
end
function [31:0] factorial;
input [3:0] opa;
reg [3:0] i;
begin
factorial = opa ? 1:0;
for(i=2;i<=9;i=i+1)
factorial = i * factorial;
end
endfunction
endmodule
仿真结果:
不是很全的结果
实验要求
1、按照上面的提示完善报告
2、将程序编译过程中出现的主要错误及解决方案进行总结
3、掌握和练习数字系统的分析步骤,并将一些核心步骤进行记录
4、将编写的程序与仿真结果进行记录。

相关文档
最新文档