硬件描述语言实验报告五
- 格式:pdf
- 大小:198.69 KB
- 文档页数:4
硬件描述语言及器件实验指导书电子科学与技术专业组第1章实验一用硬件描述语言的方法设计一个三输入与门电路一、实验目的1、掌握MAX+plusII的使用方法。
2、掌握VHDL语言程序的基本结构。
2、掌握使用硬件描述语言设计数字电路的方法和步骤。
3、掌握用硬件描述语言设计三输入与门电路的方法。
二、实验器材1.台式计算机1台。
2.可编程逻辑逻辑器件实验软件1套。
3.下载电缆一套。
4.示波器一台。
三、实验说明1.台式计算机用于向可编程逻辑逻辑器件实验软件提供编程、仿真、下载的平台,供用户使用。
2.可编程逻辑逻辑器件实验软件向原理图的设计提供平台,并将调试好的原理图下载到可编程逻辑逻辑器件中。
3.下载电缆是可编程逻辑器件软件和可编程逻辑逻辑器件之间的接口电缆,为了便于区别,用不同颜色导线区分下载电缆的电源、地和信号,一般用红色导线接电源,用黑色导线接地。
4.示波器用于观察可编程逻辑器件执行程序时输出信号的变化。
四、实验内容与要求用硬件描述语言的方法设计一个三输入与门电路,要求:(1)根据三输入与门的逻辑表达式,在构造体中直接使用并行赋值语句实现,并进行仿真;(2)根据三输入与门的真值表,在构造体中使用进程语句实现,并进行仿真;五、实验步骤(下面七个的实验的软件的使用具体步骤跟本次试验一样不再详述)1.打开新建菜单选择“textedtiorfile”,这个文件是写程序编程用的。
2.程序写完后点“保存”,注意(1)保存的格式是.vhd,(2)保存的地址不能是桌面和硬盘的根目录,否则在后面的编程将出现错误。
3.在file→projectset→projecttocurrentfile,这步是将文件设置在工程里,能够正常编译和下载。
4.在“assign→device”选择下载设备的芯片型号,如果芯片型号选错将导致以后能编译成功但下载到实验箱时无法正常工作。
5.在“max+plux”中选择“compiler”进行编译。
系统硬件综合设计实验报告# 系统硬件综合设计实验报告## 实验目的本实验的主要目的是综合运用课程中所学的硬件设计知识,设计一个具有一定功能的系统硬件。
通过实践,加深对硬件设计原理的理解,提高硬件设计能力。
## 实验原理在本实验中,我们将使用FPGA作为硬件平台,通过Verilog HDL语言进行设计。
FPGA可以灵活重构硬件电路,方便在实验过程中进行调试和修改。
在设计过程中,我们将使用数电模块以及FPGA内部资源实现所需的功能。
## 实验内容本次实验要求设计一个功能齐全的计算器。
计算器需要实现基本的加减乘除运算功能,并且能够显示运算结果。
具体功能要求如下:1. 输入:使用8位开关模拟输入两个8位二进制数。
2. 输出:输出两个输入数以及运算结果,并在数码管上显示。
3. 加法:实现两个八位二进制数的加法。
4. 减法:实现两个八位二进制数的减法。
5. 乘法:实现两个八位二进制数的乘法。
6. 除法:实现两个八位二进制数的除法。
## 实验过程与结果根据实验要求,我们首先设计了输入部分。
通过读取8个开关的状态,我们可以获得两个8位二进制数。
然后我们使用Verilog HDL语言编写了加法、减法、乘法和除法的模块。
这些模块使用了逻辑运算和算术运算来实现相应的功能。
最后,我们将输出结果显示在数码管上。
为了实现数码管的显示功能,我们使用了FPGA提供的数码管驱动模块。
在设计过程中,我们将运算结果转换成BCD 码,然后将BCD码输入到数码管驱动模块中进行显示。
经过调试和修改,我们成功实现了计算器的基本功能。
通过改变开关的状态,我们可以输入不同的二进制数,并获得正确的运算结果。
同时,结果也能够正确地显示在数码管上。
## 实验总结通过本次实验,我们深入学习了硬件设计的原理和方法,并且实践中提高了我们的设计能力。
本次实验的设计过程中,我们灵活运用了课程中所学的知识,并且通过调试和修改,解决了一些问题。
在实验中,我们也意识到硬件设计需要细致入微,每一个步骤都要认真对待。
实验名称:系统硬件综合实验实验日期:2023年4月10日实验地点:计算机实验室实验人员:张三、李四、王五一、实验目的1. 理解计算机硬件的基本组成和功能。
2. 掌握计算机硬件各部件的连接方法和调试技巧。
3. 培养动手实践能力,提高系统硬件维护与故障排除能力。
二、实验内容1. 计算机硬件认识2. 主板、CPU、内存、硬盘等硬件的安装与调试3. 显卡、声卡、网卡等外设的安装与调试4. 系统BIOS设置与优化5. 故障分析与排除三、实验步骤1. 计算机硬件认识(1)观察主板、CPU、内存、硬盘等硬件的外观和结构。
(2)了解各硬件的功能和作用。
2. 主板、CPU、内存、硬盘等硬件的安装与调试(1)准备安装工具,如螺丝刀、显卡固定卡等。
(2)按照说明书步骤,将CPU、内存、硬盘等硬件安装到主板上。
(3)连接电源线、数据线等,确保各硬件连接正常。
(4)开机测试,观察系统运行是否正常。
3. 显卡、声卡、网卡等外设的安装与调试(1)将显卡、声卡、网卡等外设插入对应的插槽中。
(2)连接电源线和数据线,确保外设连接正常。
(3)开机测试,观察系统运行是否正常。
4. 系统BIOS设置与优化(1)进入BIOS设置界面,查看硬件信息。
(2)调整内存频率、CPU倍频等参数,优化系统性能。
(3)设置硬盘启动顺序,确保系统启动顺利。
5. 故障分析与排除(1)开机后,若系统无法启动,检查硬件连接是否正常。
(2)若系统启动缓慢,检查内存、硬盘等硬件是否存在问题。
(3)若系统出现蓝屏等故障,查找相关故障代码,分析原因,进行排除。
四、实验结果与分析1. 通过本次实验,我们对计算机硬件有了更深入的了解,掌握了各硬件的安装与调试方法。
2. 在实际操作过程中,我们遇到了一些问题,如硬件兼容性、连接错误等,通过查阅资料和请教老师,成功解决了这些问题。
3. 通过优化系统BIOS设置,提高了计算机的性能。
4. 在故障分析与排除过程中,我们学会了如何分析故障代码,查找故障原因,提高了故障排除能力。
《HDL语言硬件设计》实验报告设计输入与门级结构建模仿真一、实验目的:1、掌握简单门级结构建模电路的设计方法。
2、初步掌握ModelSim6.0软件的基本操作与应用。
3、初步了解verilog建模仿真的设计全过程。
二、实验设备:PC机ModelSim6.0开发软件三、试验要求:学习使用ModelSim6.0设计软件。
学习文本编辑器使用,掌握文本编辑器的输入方法,完成4选1多路选择器结构建模的输入,并完成仿真。
四、实验:写出4选1多路选择器的模块代码,并对其进行仿真得出仿真结果,并分析仿真结果。
四选一多路选择器仿真程序module MUX4x1(Z,D0,D1,D2,D3,S0,S1);input D0,D1,D2,D3,S0,S1;output Z;wire T1,T2,T3,T4;and(T0,D0,S1bar,S0bar),(T1,D1,S1bar,S0),(T2,D2,S1,S0bar),(T3,D3,S1,S0);not(S1bar,S1),(S0bar,S0);or(Z,T0,T1,T2,T3);endmodule仿真模块代码`timescale 10ns/1nsmodule test_MUX4x1;reg[3:0]d;reg[1:0]s;wire out;MUX4x1 mymux(out,d[0],d[1],d[2],d[3],s[0],s[1]);initialbegin$moniter($time,"d=%b,s[1]=%b,s[0]=%b,out=%b\n",d,s[1],s[0],out);d=4'b1010;s=2'b00;//$display($time,"d=%b,s[1]=%b,s[0]=%b,out=%b\n",d,s[1],s[0],out); #5 s=2'b00;//$display($time,"d=%b,s[1]=%b,s[0]=%b,out=%b\n",d,s[1],s[0],out); #5 s=2'b01;//$display($time,"d=%b,s[1]=%b,s[0]=%b,out=%b\n",d,s[1],s[0],out); #5 s=2'b10;//$display($time,"d=%b,s[1]=%b,s[0]=%b,out=%b\n",d,s[1],s[0],out); #5 s=2'b11;//$display($time,"d=%b,s[1]=%b,s[0]=%b,out=%b\n",d,s[1],s[0],out); #100 $stop;endendmodule仿真结果(3)实验心得心得体会:每一种语言都有其特点,在编程时必须认真看相关书籍,并从中找到其逻辑思路,快速起草程序大纲。
集成电路设计硬件描述语言实验指导书实验一Verilog HDL程序结构与ModelSim、Quartus II软件的使用一、实验目的初步掌握Verilog HDL程序基本结构,编制简单的Verilog程序,掌握ModelSim、Quartus II软件的使用,掌握用Quartus II软件对Verilog程序进行编译仿真下载的基本方法。
二、实验内容1、编写Verilog程序描述一个电路,实现以下功能:该电路具有一个输入端口a,一个输出端口b,电路的作用是把输入到a的信号传送给b。
2、编写Verilog程序描述一个电路,实现以下功能:该电路具有两个输入端口a,b一个输出端口c,电路的作用是:c的输出是a 和b的“与”。
三、实验步骤1、编写Verilog程序,两个文件名分别为ex1.v和ex2.v,使用ModelSim的force命令进行仿真。
2、编写测试平台(testbench),对程序进行仿真。
3、启动Quartus II软件,建立工程(第一个工程名为ex1,顶层文件名为ex1.v;第二个工程名为ex2,顶层文件名为ex2.v)。
器件选择Cyclone系列中的EP1C3T144C8。
4、编写Verilog程序,存盘编译。
5、通过编译后,建立波形文件,设置仿真输入信号,存盘。
6、进行仿真,分析结果。
7、进行引脚锁定,重新编译。
对于ex1:a 对应引脚号1(PIO0)b 对应引脚号11(PIO8)对于ex2:a 对应引脚号1(PIO0)b 对应引脚号2(PIO1)c 对应引脚号11(PIO8)8、下载到EDA实验系统上的FPGA中,进行实际测试。
选用实验电路结构图NO.5。
四、实验报告要求实验目的,实验内容,设计的Verilog程序,实验结果,结果分析,心得与体会。
实验二异步清零十进制计数器的设计一、实验目的熟悉时序逻辑电路Verilog程序的设计,掌握计数器的设计方法。
二、实验内容编写Verilog程序描述一个电路,实现以下功能:具有2个输入端口clk和clr,clk输入时钟信号,clr起异步清零作用,‘1’有效,两个输出端口,c和q,q的位宽为4,输出计数值,从0到9,c的位宽为1,每当q为9时输出一个高电平脉冲。
第1篇一、实验目的本次实验旨在让学生熟悉通园硬件的基本结构和操作,掌握基本的硬件测试和故障排查方法,提高学生的动手能力和实际操作技能。
二、实验内容1. 通园硬件系统概述- 系统组成:通园硬件系统主要由中央处理器(CPU)、内存(RAM)、存储器(硬盘、固态硬盘等)、输入输出设备(键盘、鼠标、显示器等)以及外部接口组成。
- 系统功能:通园硬件系统可以实现计算机的基本功能,如数据处理、信息存储、图形显示等。
2. 硬件测试- CPU测试:使用CPU-Z软件检测CPU的型号、频率、核心数等参数。
- 内存测试:使用MemTest86+软件检测内存的稳定性和兼容性。
- 硬盘测试:使用H2testw软件检测硬盘的读写速度和坏道情况。
3. 故障排查- 开机无显示:检查电源线、显示器线是否连接正确,检查显示器是否损坏。
- 无法启动:检查硬盘是否连接正确,检查BIOS设置是否正确。
- 系统运行缓慢:检查CPU、内存、硬盘是否工作正常,检查系统是否中毒。
4. 硬件升级- 内存升级:购买相同型号的内存条,将其插入内存插槽。
- 硬盘升级:购买固态硬盘,将其替换原来的机械硬盘。
- 显卡升级:购买显卡,将其替换原来的集成显卡。
三、实验步骤1. 系统概述- 了解通园硬件系统的组成和功能。
- 学习计算机硬件的基本知识。
2. 硬件测试- 使用CPU-Z软件检测CPU信息。
- 使用MemTest86+软件检测内存信息。
- 使用H2testw软件检测硬盘信息。
3. 故障排查- 针对开机无显示、无法启动、系统运行缓慢等问题,进行故障排查。
- 根据故障现象,分析可能的原因,并进行相应的处理。
4. 硬件升级- 根据实际需求,选择合适的硬件进行升级。
- 将新硬件安装到计算机中,并进行测试。
四、实验结果1. 硬件测试结果- CPU测试:检测到CPU型号、频率、核心数等信息。
- 内存测试:内存稳定,无错误。
- 硬盘测试:硬盘读写速度正常,无坏道。
硬件描述语言范例第一篇:硬件描述语言范例硬件描述语言语言设计实例 1、8-3编码器module encode_verilog(a ,b);input [7:0] a;//编码器输入wire [7:0] a;output [2:0] b;//编码器输出 reg [2:0] b;always @(a) begincase(a)//编码器某一输入端口为高电平输出相应的3位二进制数8'b0000_0001 : b<=3'b000;//08'b0000_0010 : b<=3'b001;//18'b0000_0100 : b<=3'b010;//28'b0000_1000 : b<=3'b011;//38'b0001_0000 : b<=3'b100;//48'b0010_0000 : b<=3'b101;//58'b0100_0000 : b<=3'b110;//68'b1000_0000 : b<=3'b111;//7default : b<= 3'b000;//其他情况编码器输出3’b000endcaseend endmodule 2、8-3优先编码器module p_encode_verilog(A ,I ,GS ,EO ,EI);//编码器以低为有效input [7:0] I;//编码器输入 wire [7:0] I;input EI;//输入使能,EI=0时,编码器正常工作 wire EI;output [2:0] A;//编码器输出 reg [2:0] A;output GS;//优先编码器工作状态标志,编码器的八个输入端有信号输入时,GS=0 reg GS;output EO;//输出使能,reg EO;always @(I or EI)if(EI)//使用if、else if表明条件的优先级顺序beginA <= 3'b111;GS <= 1;EO <= 1;end else if(I[7] == 0) beginA <= 3'b000;GS <= 0;EO <= 1;end else if(I[6] == 0) beginA <= 3'b001;GS <= 0;EO <= 1;endelse if(I[5] == 0) beginA <= 3'b010;GS <= 0;EO <= 1;endelse if(I[4] == 0) beginA <= 3'b011;GS <= 0;EO <= 1;endelse if(I[3] == 0) beginA <= 3'b100;GS <= 0;EO <= 1;endelse if(I[2] == 0)beginA <= 3'b101;GS <= 0;EO <= 1;endelse if(I[1] == 0)beginA <= 3'b110;GS <= 0;EO <= 1;endelse if(I[0] == 0)beginA <= 3'b111;GS <= 0;EO <= 1;endelse if(I == 8'b11111111)beginA <= 3'b111;GS <= 1;EO <= 0;end endmodule 3、3-8译码器module decoder_verilog(G1 ,Y ,G2 ,A ,G3);input G1;//使能输入,高有效 wire G1;input G2;//使能输入,低有效 wire G2;input [2:0] A;//3位译码器输入,为高有效 wire [2:0] A;input G3;//使能输入wire G3;//使能输入,低有效output [7:0] Y;//8位译码器输出,为低有效reg [7:0] Y;regs;always @(A ,G1, G2, G3)begins <= G2 | G3;if(G1 == 0)//G1为低有效Y <= 8'b1111_1111;else if(s)Y <= 8'b1111_1111;elsecase(A)3'b000 : Y<= 8'b1111_1110;3'b001 : Y<= 8'b1111_1101;3'b010 : Y<= 8'b1111_1011;3'b011 : Y<= 8'b1111_0111;3'b100 : Y<= 8'b1110_1111;3'b101 : Y<= 8'b1101_1111;3'b110 : Y<= 8'b1011_1111;3'b111 : Y<= 8'b0111_1111;endcase end endmodule4、数据选择器module mux8_1_verilog(Y ,A ,D0, D1,D2, D3, D4, D5, D6, D7 ,G);input [2:0] A;//地址输入端 wire [2:0] A;input D0;//数据输入端 input D1;//数据输入端 input D2;//数据输入端 input D3;//数据输入端 input D4;//数据输入端 input D5;//数据输入端 input D6;//数据输入端 input D7;//数据输入端input G;//使能端,当G=1时Y=0,当G=0时数据选择器正常工作 wire G;output Y;//数据输出端 reg Y;always @(G or A or D0 or D1 or D2 or D3 or D4 or D5 or D6 or D7)beginif(G == 1)//使能端的优先级高Y <= 0;elsecase(A)//根据输入的地址A确定数据选择器输出哪路输入数据3'b000 : Y = D0;3'b001 : Y = D1;3'b010 : Y = D2;3'b011 : Y = D3;3'b100 : Y = D4;3'b101 : Y = D5;3'b110 : Y = D6;3'b111 : Y = D7;default : Y = 0;endcase end endmodule5、多位数值比较器module compare_verilog(Y ,A ,B);input [3:0] A;//4位二进制数A wire [3:0] A;input [3:0] B;//4位二进制数B wire [3:0] B;output [2:0] Y;//A与B大小的比较结果 reg [2:0] Y;always @(A or B)begin if(A > B)Y <= 3'b001;//A > B时Y输出3'b001else if(A == B)Y <= 3'b010;//A = B时Y输出3'b010elseY <= 3'b100;//A < B时Y输出3'b100end endmodule6、全加器module sum_verilog(A ,Co ,B ,S ,Ci);input A;//输入加数A wire A;input B;//输入加数B wire B;input Ci;//相邻低位的进位输入信号wire Ci;output Co;//向相邻高位的进位输出信号 reg Co;output S;//相加和数输出 reg S;always @(A or B or Ci)beginif(A== 0 && B == 0 && Ci == 0)beginS <= 0;Co <= 0;end else if(A== 1 && B == 0 && Ci == 0)beginS <= 1;Co <= 0;end else if(A== 0 && B == 1 && Ci == 0)beginS <= 1;Co <= 0;end else if(A==1 && B == 1 && Ci == 0)beginS <= 0;Co <= 1;end else if(A== 0 && B == 0 && Ci == 1)beginS <= 1;Co <= 0;end else if(A== 1 && B == 0 && Ci == 1)beginS <= 0;Co <= 1;end else if(A== 0 && B == 1 && Ci == 1)beginS <= 0;Co <= 1;endelsebeginS <= 1;Co <= 1;end end endmodule7、D触发器module Dflipflop(Q ,CLK , RESET ,SET ,D ,Qn);input CLK;//D触发器输入时钟wire CLK;input RESET;//D触发器清零输入wire RESET;input SET;//D触发器预置数输入 wire SET;input D;//D触发器输入wire D;output Q;//D触发器输出reg Q;output Qn;wire Qn;assign Qn = ~Q;//将D触发器输出取反always @(posedge CLK or negedge SET or negedge RESET)beginif(!RESET)//RESET下降沿将D触发器输出清零Q <= 0;else if(!SET)//SER下降沿将D触发器输出置1Q <= 1;else Q <= D;//CLK上升沿D触发器输出等于输入end endmodule8、寄存器module reg8(clr ,clk ,DOUT ,D);input clr;//异步清零信号,高有效 wire clr;input clk;//时钟输入 wire clk;input [7:0] D;//寄存器数据输入wire [7:0] D;output [7:0] DOUT;//寄存器数据输出reg [7:0] DOUT;always @(posedge clk or posedge clr)beginif(clr == 1'b1)DOUT <= 0;else DOUT <= D;end endmodule9、双向移位寄存器module shiftdata(left_right ,load ,clr ,clk ,DIN ,DOUT);input left_right;// 左移右移控制信号 wire left_right;input load;//异步置数信号,有效时将DIN输入wire load;input clr;//异步清零信号,高有效 wire clr;input clk;//时钟输入 wire clk;input [3:0] DIN;//并行输入wire [3:0] DIN;output [3:0] DOUT;//并行输出wire [3:0] DOUT;// DOUT是一个wire型变量,不能在always 块中被赋值reg [3:0] data_r;//所以定义一个寄存器型变量data_r作为中间变量 assignDOUT = data_r;always @(posedge clk or posedge clror posedge load)beginif(clr == 1)//异步清零data_r <= 0;else if(load)//异步置数data_r <= DIN;else beginif(left_right)//left_right=1,信号左移begindata_r <=(data_r<<1);data_r[0] <= 0;//移出位补0endelse begin //left_right=0,信号右移data_r <=(data_r>>1);data_r[3] <= 0;//移出位补0endendend endmodule 10、4位二进制加减法计数器module counter4(load ,clr ,c ,DOUT , clk, up_down ,DIN);input load;//异步预置数 input clk;//输入时钟 wire load;input clr;//异步清零wire clr;input up_down;//加减计数,up_dpwn=1加计数,up_down=0减计数 wire up_down;input [3:0] DIN;//预置数输入 wire [3:0] DIN;output c;//进位/借位输出,可以用于计数器的级联reg c;output [3:0] DOUT;//计数输出wire [3:0] DOUT;reg[3:0] data_r;assign DOUT = data_r;always @(posedge clk or posedge clror posedge load)beginif(clr == 1)//异步清零data_r <= 0;else if(load == 1)//异步预置data_r <= DIN;else begin if(up_down ==1)//加计数beginif(data_r == 4'b1111)begindata_r <= 4'b0000;c = 1;endelse begindata_r <= data_r +1;c = 0;endendelse //减计数beginif(data_r == 4'b0000)begindata_r <= 4'b1111;c = 1;end else begindata_r <= data_r-1;c = 0;endendend endendmodule11、十进制加减法计数器module counter10(load ,clr ,c ,DOUT ,clk,up_down ,DIN ,seven_seg);input load;//异步预置数 input clk;//输入时钟 wire load;input clr;//异步清零 wire clr;input up_down;//加减计数,up_dpwn=1加计数,up_down=0减计数wireup_down;input [3:0] DIN;//预置数输入 wire [3:0] DIN;output c;//进位/借位输出,可以用于计数器的级联reg c;output [3:0] DOUT;//计数输出 output [7:0] seven_seg;//7段数码管 wire [3:0] DOUT;reg [3:0] data_r;assign DOUT = data_r;always @(posedge clk or posedge clror posedge load)beginif(clr == 1)//异步清零data_r <= 0;else if(load == 1)//异步预置data_r <= DIN;else if(up_down ==1 & data_r == 9)//加进位beginc = 1;data_r <= 4'b0000;end else if(up_down ==0 & data_r == 0)//减借位beginc = 1;data_r <= 9;end elsebeginif(up_down ==1)begin //加计数data_r <= data_r +1;c = 0;endelse begin//减计数data_r <= data_r-1;c = 0;endend end/************数码管***************/ assign seven_seg =Y_r;reg [7:0] Y_r;always @(data_r)//用7段数码管显示计数输出begin Y_r =8'b11111111;case(data_r)4'b0000: Y_r = 8'b00000011;//显示0 4'b0001: Y_r = 8'b10011111;//显示 1 4'b0010: Y_r = 8'b00100101;//显示 2 4'b0011: Y_r = 8'b00001101;//显示 3 4'b0100: Y_r = 8'b10011001;//显示 4 4'b0101: Y_r = 8'b01001001;//显示 5 4'b0110: Y_r = 8'b01000001;//显示 6 4'b0111: Y_r = 8'b00011111;//显示7 4'b1000: Y_r = 8'b00000001;//显示8 4'b1001: Y_r = 8'b00001001;//显示9 default: Y_r = 8'b11111111;//默认数码管不发光endcase endendmodule12、顺序脉冲发生器module pulsegen(Q ,clr ,clk);input clr;//异步预置数wire clr;input clk;//时钟输入 wire clk;output [7:0] Q;//顺序脉冲输出 wire [7:0] Q;reg [7:0] temp;reg x;assign Q =temp;always @(posedge clk or posedge clr)beginif(clr==1)begintemp <= 8'b00000001;//temp寄存预定的序列x= 0;end elsebeginx<= temp[7];//序列最高位输出temp <= temp<<1;//temp左移一位temp[0] <=x;//将输出的结果赋给序列最低位,实现序列的循环输出endend endmodule13、序列信号发生器module xlgen(Q ,clk ,res);input clk;//时钟输入 wire clk;input res;//异步预置数 wire res;output Q;//序列信号输出 reg Q;reg [7:0] Q_r;always @(posedge clk or posedge res)beginif(res ==1)beginQ <= 1'b0;Q_r <= 8'b11100100;//Q_r寄存预定的序列endelsebeginQ <= Q_r[7];//序列最高位输出Q_r <= Q_r<<1;//Q_r左移一位Q_r[0] <=Q;//将输出的结果赋给序列最低位,实现序列的循环输出endend endmodule14、分频器module clockdiv(Q ,rst ,sysclk ,sel);input rst;//系统复位wire rst;input sysclk;//系统时钟输入 wire sysclk;input [1:0] sel;//分频倍数选择 wire [1:0] sel;output Q;//分频器输出 wire Q;reg [2:0] q;reg [31:0] cnt;reg clk;//时钟分频模块always @(posedge sysclk or negedge rst)begin if(!rst)begin cnt <= 0;clk <= 1'b1;end else begincnt <= cnt + 1'b1;if(cnt >= 32'd2500000)begin /clk时钟周期是系统时钟周期的5000000倍clk <= ~clk;cnt <= 0;end end end//分频器模块always @(posedge clk or negedge rst)if(!rst)q[0] <= 0;else q[0] <= ~q[0];// q[0]是clk的2分频always @(posedge q[0] or negedge rst)if(!rst)q[1] <= 0;else q[1] <= ~q[1];// q[1]是clk的4分频always @(posedge q[1] or negedge rst)if(!rst)q[2] <= 0;else q[2] <= ~q[2];// q[2]是clk的8分频assign Q =(sel== 2'd0)? clk : //分频器输出clk(sel== 2'd1)? q[0] : //分频器输出clk的二分频(sel== 2'd2)? q[1] : //分频器输出clk的四分频(sel== 2'd3)? q[2] : 0;//分频器输出clk的八分频 endmodule 第二篇:教学大纲-FPGA及硬件描述语言《FPGA与硬件描述语言》教学大纲课程名称:FPGA与硬件描述语言英文名称: FPGA and hardware description language 课程类别:实践教学课课程编号:学分: 4学时:68 课程简介:FPGA与硬件描述语言该课程主要讲授数字逻辑电路的基本知识、基本理论和基本分析、设计方法,并利用现代EDA技术的verilog和Multisim进行数字逻辑电路分析与设计,它起到由专业基础课向专业课过渡的承上启下的作用。
一、实验目的1. 理解和掌握数字电路设计的基本原理和方法。
2. 学会使用FPGA(现场可编程门阵列)进行硬件设计。
3. 提高实际动手能力和问题解决能力。
4. 熟悉硬件描述语言(HDL)VHDL或Verilog的使用。
二、实验环境1. 开发平台:Xilinx Vivado 2022.22. 硬件设备:Xilinx Zynq-7000 SoC 开发板3. 软件工具:VHDL/Verilog 编辑器、仿真工具ModelSim、FPGA 编译器三、实验内容本次实验以设计一个简单的数字信号处理系统为例,包括以下模块:1. 数据输入模块2. 数据处理模块3. 数据输出模块四、实验步骤1. 需求分析根据实验要求,设计一个能够对输入数据进行简单处理的数字信号处理系统。
具体要求如下:- 输入数据为8位二进制数。
- 处理模块为简单的加法运算。
- 输出数据为处理后的结果。
2. 模块设计根据需求分析,将系统分为三个模块:- 数据输入模块:负责读取输入数据。
- 数据处理模块:负责执行加法运算。
- 数据输出模块:负责输出处理后的数据。
3. 代码编写使用VHDL或Verilog语言编写各模块代码。
```verilog// 数据输入模块module data_input(input clk, // 时钟信号input reset, // 复位信号output reg [7:0] data_in // 输入数据);always @(posedge clk or posedge reset) begin if (reset) begindata_in <= 8'b0;end else begin// 读取输入数据,此处省略具体实现endendendmodule// 数据处理模块module data_process(input [7:0] data_in, // 输入数据output reg [7:0] data_out // 输出数据);always @(data_in) begindata_out = data_in + 8'b1; // 简单的加法运算 endendmodule// 数据输出模块module data_output(input clk,input reset,input [7:0] data_out,output reg [7:0] data_display // 显示输出数据);always @(posedge clk or posedge reset) beginif (reset) begindata_display <= 8'b0;end else begindata_display <= data_out;endendendmodule```4. 仿真验证使用ModelSim进行仿真,验证各模块功能。
实验五
有限状态机
一、实验目的
本次实验通过Verilog硬件语言编写摩尔型有限状态机和米勒型有限状态机,
掌握采用有限状态机产生各种控制信号的原理,熟悉如何选用合适的有限状态机
进行电路设计,通过实验进一步了解原理图编辑方法和仿真方法。
二、实验要求
1、利用Verilog硬件语言,参考提供的源程序,设计一个采用摩尔型有限状
态机实现的流水灯控制程序;
2、利用Verilog硬件语言,参考提供的源程序,设计一个采用米勒型有限状
态机实现的串行口发送程序;
3、利用Verilog
硬件语言,参考提供的源程序,设计一个采用米勒型有限状
态机实现的串行口接收程序;
4、利用原理图编辑方法,将串行口发送和接收模块进行连接,实现完整的
串行通信电路,并对该电路进行仿真。
三、实验设计
1.摩尔型有限状态机实现的流水灯源程序:
modulesled(clk,led);inputclk;output[7:0]led;reg[7:0]led;reg[2:0]state;parameters0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101,s6=3'b110,s7=3'b111;always@(posedgeclk)
case(state)
s0:beginstate<=s1;led<=8'b00000001;end
s1:beginstate<=s2;led<=8'b00000010;end
s2:beginstate<=s3;led<=8'b00000100;end
s3:beginstate<=s4;led<=8'b00001000;end
s4:beginstate<=s5;led<=8'b00010000;end
s5:beginstate<=s6;led<=8'b00100000;end
s6:beginstate<=s7;led<=8'b01000000;end
s7:beginstate<=s0;led<=8'b10000000;end
endcase
endmodule
仿真结果:
2
状态图:
2.米勒型有限状态机实现的串行口发送源程序:
modules_tx(clk,en,dain,txd);inputclk,en;input[7:0]dain;outputtxd;reg[7:0]da_temp;regtxd;reg[3:0]state;parameterswait=4'b0000,star=4'b0001,s1=4'b0010,s2=4'b0011,s3=4'b0100,s4=4'b0101,s5=4'b0110,s6=4'b0111,s7=4'b1000,always@(posedgeclk)
if(!en)
begin
state<=swait;
txd<=1;
end
else
case(state)
swait:beginstate<=star;txd<=1;end
star:beginstate<=s1;txd<=0;end
s1:beginstate<=s2;txd<=da_temp[7];end
s2:beginstate<=s3;txd<=da_temp[6];end
s3:beginstate<=s4;txd<=da_temp[5];end
s4:beginstate<=s5;txd<=da_temp[4];end
s5:beginstate<=s6;txd<=da_temp[3];end
s6:beginstate<=s7;txd<=da_temp[2];end
s8=4'b1001,stop=4'b1010;always@(posedgeen)da_temp<=dain;s7:beginstate<=s8;txd<=da_temp[1];end
s8:beginstate<=stop;txd<=da_temp[0];end
stop:beginstate<=stop;txd<=1;end
endcase
endmodule
状态图:
3.米勒型有限状态机实现的串行口接收源程序:
modules_rx(clk,dain,daout);inputclk,dain;output[7:0]daout;reg[7:0]daout;reg[7:0]da_temp;reg[3:0]state;parameterstar=4'b0000,s1=4'b0010,s2=4'b0011,s3=4'b0100,s4=4'b0101,s5=4'b0110,s6=4'b0111,s7=4'b1000,s8=4'b1001,stop=4'b1010;always@(negedgeclk)case(state)star:if(dain)state<=star;
else
state<=s1;
s1:beginstate<=s2;da_temp[7]<=dain;end
s2:beginstate<=s3;da_temp[6]<=dain;end
s3:beginstate<=s4;da_temp[5]<=dain;end
s4:beginstate<=s5;da_temp[4]<=dain;end
s5:beginstate<=s6;da_temp[3]<=dain;end
s6:beginstate<=s7;da_temp[2]<=dain;end
s7:beginstate<=stop;da_temp[1]<=dain;end
stop:if(!dain)
state<=stop;
else
begin
state<=star;
daout<=da_temp;
end
endcase
endmodule
状态图:
4
4.串行口通信系统原理图电路:
仿真结果:
【实验总结实验总结】
】
本次试验我通过Verilog硬件语言来编写摩尔型有限状态机和米勒型有限状
态机,并掌握了采用有限状态机来产生各种控制信号的原理,以及熟悉如何选用
合适的有限状态机进行电路设计,通过实验进一步了解原理图编辑方法和仿真方
法。