当前位置:文档之家› 基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发.doc

基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发.doc

基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发.doc
基于FPGA的洗衣机控制器 verilog hdl 语言描述的设计与开发.doc

编号: 1

电机控制综合课程设计

报告书

课题:基于FPGA的洗衣机控制器

院(系):机电工程学院

专业:电气工程及其自动化

学生姓名:蒋岷君

学号:0800120313

题目类型:?理论研究?实验研究?工程设计?工程技术研究?软件开发

2011 年7月6 日

前言

一、洗衣机控制器主要内容

l.任务要求和内容

设计制作一个洗衣机的正反转定时控制线路。

1)控制洗衣机的电机作如下运转

定时开始――正转10S――暂停5S――反转10S――暂停5S――定时到停止

定时未到

2)用2位七段数码管显示定时时间(S)。

2.洗衣机控制器的使用步骤:

(1)电路上电后,在Start拨码开关未闭合前可以由UpKey和DownKey按键开关“+”“-”设置总的工作时间,确定洗衣机控制器工作允许时间。

(2)设定好允许工作时间后,闭合Start开关,洗衣机控制器开始工作。

(3)可以看见指示正转LED灯亮10s,停转LED灯亮5S,反转LED灯亮10s,停转LED亮5s,如此反复直至工作允许时间为0,蜂鸣器发出警报。

二、设计原理简介

洗衣机控制器的设计主要是时序控制和定时器的设计,由一片FPGA和外围电路构成电器控制部分。FPGA接收键盘的控制命令,控制洗衣机的正转、反转、停机和定时时间为0报警的工作状态、控制并显示工作状态以及显示定时时间。对FPGA芯片的编程采用模块化的Verilog HDL (硬件描述语言)进行设计,设计由分频模块,按键消抖模块,定时时间自减模块,时序中心控制模块,数码管显示模块组成,顶层实现整个芯片的功能。顶层使用原理图实现,底层由Verilog HDL语句实现。

FPGA的输入时钟为20M hz,因此使用了分频模块输出1hz的方波给定时器设定自减模块提供每1s自减1的信号,定时器模块输出的自减值输入给数码管显示译码模块和时序控制模块,通过译码模块定时器的值可以在数码管上显示,同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、停机和报警工作方式。通过按键消抖模块可以准确无抖动的设定定时器的工作时间。

目录

一、前言 (2)

二、目录 (3)

三、正文 (4)

3.1洗衣机控制器的整体框图及原理 (4)

3.2洗衣机控制电路单元模块设计和仿真 (5)

3.2.1按键消抖模块的设计 (5)

3.2.2时钟分频模块的设计 (6)

3.2.3定时器设定和自减模块的设计 (7)

3.2.4时序中心控制模块的设计 (8)

3.2.5数码管显示译码模块的设计 (9)

四、电路调试 (11)

五、结束语和心得体会 (12)

六、参考文献 (13)

七、附录 (13)

7.1 FPGA系统板部分原理图 (13)

7.2 FPGA系统板PCB图 (15)

三、正文

3.1 洗衣机控制器的整体框图及原理:

基于fpga的洗衣机控制器电路主要由五大模块组成,分别为按键消抖模块,时钟分频模块,定时器设定和自减模块,时序中心控制模块,数码管显示译码模块。具体电路如图1所示:

图1

由于输入时钟为20M hz,因此使用了分频模块输出1hz的方波(中间上方模块)给定时器设定和自减模块(中间下方模块)提供每1s自减1的信号,定时器模块输出的自减值输入给数码管显示译码模块(右下方模块)和时序控制模块(右上模块),通过译码模块定时器的值可以在数码管上显示,同时定时器的值输入到时序控制模块由此可以控制洗衣机的正转、反转、停机和报警工作方式。

按键消抖模块(左下方模块)的作用是为了消除按键抖动而设立的。

3.2、洗衣机控制电路单元模块设计和仿真

3.2.1按键消抖模块的设计

在进行独立按键或者矩阵式按键的设计的时候,我们在按下键盘的时候其实并不只是按下去而是有一个抖动的过程,就连松手的过程也有抖动,然而这个抖动通常被人们所忽略,从而导致输入数据的错误和乱码,因此我们必须对按键进行按键的消抖处理。我们通常在单片机的消抖使用的是延时消抖,这种消抖也称为软件消抖,但是fpga的Verilog HDL语言是硬件描述语言,所以也称作硬件消抖,主要运用了状态机和延时的消抖方式。

按键消抖模块图如图2:

图2

其Verilog HDL 语言描述如下:

module Key_module (Key_in,Key_out,Clk,Rst);

input Clk,Rst,Key_in;

output Key_out;

reg Reset; reg H_L_f1;reg H_L_f2; reg H_L_f3;

reg H_L_f4; reg [17:0] Count; wire H_L_sig;

parameter Delay10ms = 'd200_000;

always @(posedge Clk ) //异步复位同步释放

begin Reset<=Rst; end

always @(posedge Clk or negedge Reset )

begin

if(!Reset) begin H_L_f1<=1; H_L_f2<=1; end

else begin H_L_f1<=Key_in; H_L_f2<=H_L_f1; end

end

assign H_L_sig = H_L_f2 & (~H_L_f1); //延时的启动标志位

always @(posedge Clk or negedge Reset )

begin

if(!Reset)begin Count<=0;end

else if(Count == Delay10ms)begin Count<=0; end

else if(H_L_sig) begin Count<=0; end

else begin Count<=Count+1; end

end

always @(posedge Clk or negedge Reset)

begin

if(!Reset) begin H_L_f3<=1; end

else if(Count == Delay10ms) begin H_L_f3<=Key_in; end

end

always @(posedge Clk or negedge Reset )

begin

if(!Reset) begin H_L_f4<=1; end

else begin H_L_f4<=H_L_f3; end

end

assign Key_out = H_L_f4 & (~H_L_f3);

endmodule

3.2.2时钟分频模块的设计

由于使用的FPGA的输入时钟是20M hz,定时模块的自减频率是1hz,因此需要进行分频得到1hz的时钟频率输入给定时模块。

时钟分频模块图如图3:时钟分频模块功能仿真图如图4:

图3 图4

其Verilog HDL 语言描述如下:

module FrequencyDivider(Clk,Rst,ClkOut);

input Clk,Rst; output ClkOut;

reg [23:0] Count; reg OutData; reg Reset;

always @(posedge Clk ) //异步复位同步释放

begin Reset<=Rst; end

always @(posedge Clk or negedge Reset)

begin

if(!Reset) begin Count<=0; OutData<=0; end

else if(Count==24'd10_000_000) begin Count<=0;

OutData<=~OutData; end

else begin Count<=Count+1'd1; end

end

assign ClkOut=OutData;

endmodule

3.2.3定时器设定和自减模块的设计

定时器设定和自减模块可以设定定时器的工作时间,通过输入的1hz的信号使定时器的值每秒自减1,直至为0。其定时器的值输出给数码管译码模块和时序控制模块。

定时器设定和自减模块图如图 5;定时器设定和自减模块功能仿真图如图6:

图5

图6

其Verilog HDL 语言描述如下:

module KeySet(Clk,Clk_1hz,Rst,Start,UpKey,DownKey,SetTimer);

input Clk,Clk_1hz,Rst,Start,UpKey,DownKey; output [6:0] SetTimer;

reg [6:0] Timer; reg [6:0] rTimer; reg Reset;

always @(posedge Clk ) //异步复位同步释放

begin Reset<=Rst; end

always @(posedge Clk or negedge Reset)

begin

if(!Reset) begin Timer<=7'd50; end //定时时间赋初值

else if(Start) begin if(UpKey) begin Timer<=Timer+1'b1; end

else if(DownKey) begin Timer<=Timer-1'b1; end end //时间减一end

always @(posedge Clk_1hz) //1s信号输入

begin

rTimer<=Timer; if(!Start) begin

if(rTimer==7'd0) begin rTimer<=0; end //时间到0保持以免错误else begin rTimer<=rTimer-1'b1; end end//每秒减一

end

assign SetTimer=rTimer;

endmodule

3.2.4时序中心控制模块的设计

时序控制模块由定时器送来的值来控制洗衣机控制器的工作方式,正转、反转、停转和报警。

时序中心控制模块图如图7;时序中心控制模块图功能仿真如图8:

图7

图8

其Verilog HDL 语言描述如下:

module Center(Clk,Start,Rst,Forward,Back,Stop,Sound,SetTimer);

input Clk,Start,Rst; input [6:0]SetTimer;

output Back,Stop,Sound,Forward;

reg rBack,rStop,rSound,rForward; reg [3:0] i; reg [1:0] j;

reg [6:0] rSetTimer; reg [24:0] num; reg Reset;

always @(posedge Clk ) //异步复位同步释放

begin Reset<=Rst; end

always @(posedge Clk or negedge Reset)

begin

if(!Reset) begin rBack<=0; rStop<=0; rSound<=0;

rForward<=0; rSetTimer<=0; i<=0; j<=0; num<=0; end

else if(!Start && SetTimer) begin //播下开始键并且倒计时不为0

case(i) //0~1正转10s

4'd0: begin rSetTimer<=SetTimer; rForward<=1'b1;

rBack<=1'b0; rStop<=1'b0; rSound<=1'b0; i<=i+1'b1; end

4'd1: begin if(SetTimer==rSetTimer-4'd10) begin i<=i+1'b1; end end

4'd2: begin rSetTimer<=SetTimer; i<=i+1'b1;rForward<=1'b0;

rBack<=1'b0; rStop<=1'b1; rSound<=1'b0; end //2~3停机5s

4'd3: begin if(SetTimer==rSetTimer-3'd5) begin i<=i+1'b1; end end

4'd4: begin rSetTimer<=SetTimer; i<=i+1'b1; rForward<=1'b0;

rBack<=1'b1; rStop<=1'b0; rSound<=1'b0; end //4~5反转10s

4'd5: begin if(SetTimer==rSetTimer-4'd10) begin i<=i+1'b1; end end

4'd6: begin rSetTimer<=SetTimer; i<=i+1'b1; rForward<=1'b0;

rBack<=1'b0; rStop<=1'b1; rSound<=1'b0; end //6~7停机5s

4'd7: begin if(SetTimer==rSetTimer-3'd5) begin i<=i+1'b1; end end

4'd8: begin i<=4'd0; end//倒计时不为0,则循环,回到case 0

endcase end

else if(!SetTimer) begin case( j )

2'd0: begin //倒计时为0时停机并报警1s

if(num==25'd20_000_000) begin j<=j+1'b1; end

else begin num<=num+1'b1; rForward<=1'b0;

rBack<=1'b0; rStop<=1'b1; rSound<=1'b1;end end

2'd1: begin rSound<=1'b0; end endcase end

end

assign Forward=rForward; assign Back=rBack;

assign Stop=rStop; assign Sound=rSound;

endmodule

3.2.5数码管显示译码模块的设计

数码管显示译码模块主要功能是把定时器送来的值译码并通过数码管显示出来。fpga的Verilog HDL硬件语言是并行的这有别于软件的描述语言扫描方式。

数码管显示译码模块图如图9:

图9

数码管显示译码模块功能仿真图如图10:、

图10

其Verilog HDL 语言描述如下:

module digital (Clk,Rst,Date_in,Dig_sel,Dig_out);

input Rst,Clk; input [6:0] Date_in; //MAX 99

output [5:0] Dig_sel; output [7:0] Dig_out;

reg [7:0] Display [0:9];//定义为8位,10个地址

reg [5:0] Led_sel; reg [7:0] Led_out; reg Reset;

reg [20:0] Count; reg [9:0] rDate;

parameter Time='d100_000;//并行扫描时间

initial

begin

Count=0; rDate=0; Led_sel[5:0]='b111_111;

Display[0]='b1100_0000; Display[1]='b1111_1001;

Display[2]='b1010_0100; Display[3]='b1011_0000;

Display[4]='b1001_1001; Display[5]='b1001_0010;

Display[6]='b1000_0010; Display[7]='b1111_1000;

Display[8]='b1000_0000; Display[9]='b1001_0000;

end

always @(posedge Clk )

begin Reset<=Rst; end

always @ (posedge Clk or negedge Reset)

begin if(!Reset) Count<=0;

else if(Count == Time) Count<=0;

else Count<=Count+1; end

always @ ( posedge Clk or negedge Reset)//并行概念很重要

begin //数码管显示

rDate<=Date_in;//从wire上读值过来赋给reg型变量提高数据的稳定性

if(!Reset) begin rDate<=0; end

else if(Count>'d0 && Count<='d50_000) begin Led_sel<='b111_110;

Led_out<=Display[rDate%10]; end //段选

else begin Led_sel<='b111_101; Led_out<=Display[rDate/10]; end end

assign Dig_sel = Led_sel;

assign Dig_out = Led_out;

endmodule

四、电路调试

1.定时器自减值与洗衣机控制器的正转、反转,停机,报警在RTL仿真的时候是同步的,但是下载到硬件上运行的时候出错,不能同步。

解决方法:反复的研究Verilog HDL程序后发现,开始是使用分频器输出的1hz 的时钟输入给时序中心控制器模块,而定时器模块的时钟是20M hz的,两个模块的时钟不能同步,因此就存在一定的延时不同步导致错误。然后我把时序中心控制模块的时钟也改为20M hz,让两个模块的时钟同步,定时器自减输出的值输入到时序中心控制模块作为时序控制的信号,问题顺利解决。

2.程序在运行的时有时候数码管会显示定时器的起始值,洗衣机控制器又重新从头开始运行。

解决方法:研究硬件电路的设计发现,启动工作控制开关,默认设置为了低电平是不启动的,高电平启动并保持才能使洗衣机控制器正常工作,而在启动后工作中,电平出现不稳的状态,电平并不能很好的起到拉高的作用,因此怀疑是上拉能力不足和电源纹波的干扰,导致电平的不稳定性使洗衣机控制器有时复位。随后我便在电源的输出端并接一个220uf的电解电容和一个0.1uf的瓷片电容,再用示波器测试发现纹波减少很多;同时为了防止上拉能力不足导致错误,我便把启动控制开关默认设置为高电平,低电平为启动和保持。然后再测试,问题解决。

3.使用按键修改定时器模块的设定值时,按一下按键,数据变化好几次,不是每按一次改变一个值。

解决方法:根据以往的经验可以知道是因为按键没有消抖所致,在设计电路的时候忘记了使用按键消抖模块,随后编写了按键消抖模块,再接入控制系统测试,数据正确,问题解决。

五、结束语和心得体会

在经过了几天的学习设计仿真,我学到了很多东西,主要是对数字电路的基础理论知识的复习巩固和对FPGA方面知识的掌握,更加清楚了解到了Verilog HDL 语言的魅力,对以前学的理论知识通过实践来检验,更深入的理解了理论联系实际的重要性。

通过这次的FPGA设计,我可以说是受益良多。看到洗衣机控制器的题目,我首先想到的是状态机的设计,因为课本上说状态机其实就是控制器,后来经过看书觉得应该是摩尔型状态机,可是分析后发现设计题目比较复杂,如果用状态机的思路来设计,比较困难。结合以前做课程设计的经验,如果用模块化层次化的设计思路更清晰,设计起来也更容易,特别是更符合FPGA设计的的流程,故自己开始设计各功能模块。洗衣机控制器主要实几种状态的循环改变,还有计时和数码显示的功能,所以我觉得电路主要有五大部分组成,包括:按键消抖模块,时钟分频模块,定时器设定和自减模块,时序中心控制模块,数码管显示译码模块。在设计的过程中,我也遇到了不少困难,在经过耐心的调试后还是顺利解决了所有问题。通过这次设计,让我更深入的掌握了Verilog HDL的设计方法与一些技巧,让我对FPGA的编程、定时器和计数器的设计更加熟悉,让我更加明白时序组合门电路设计思路和方法。在设计中学到不少课本上没有的东西,并且充分认识到家电控制电路设计在一片FPGA芯片内,具有体积小、可靠性高、降低成本、设计周期短,功能灵活的特点,本人受益匪浅。

我相信通过此次课程设计,一定会对以后的设计工作提供很大帮助。

六、参考文献

1、黑金开发板配套教程VerilogHDL那些事儿

2、康华光主编电子技术基础数字部分(第五版)

3、陈明义主编、电子技术课程设计实用教程[S] 2002年05月第1版

4、EDA先锋工作室设计与验证Verilog HDL

5、马建国孟宪元编著FPGA现代数字系统设计

七、附录

7.1 FPGA系统板部分原理图

7.2 FPGA系统板PCB图

VerilogHDL复习题与答案

VerilogHDL硬件描述语言复习 一、 1.VerilogHDL是在哪一年首次被IEEE标准化的? 答:VerilogHDL是在1995年首次被IEEE标准化的。 2.VerilogHDL支持哪三种基本描述方式? 答:VerilogHDL可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程 化结 构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述 建模 3.VerilogHDL是由哪个公司最先开发的? 答:VerilogHDL是由GatewayDesignAutomation公司最先开发的 4.VerilogHDL中的两类主要数据类型什么? 答:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示 抽象的数据存储元件。 5.UDP代表什么? 答:UDP代表用户定义原语 6.写出两个开关级基本门的名称。答: pmosnmos 7.写出两个基本逻辑门的名称。答: andor 8.在数据流描述方式中使用什么语句描述一个设计? 答:设计的数据流行为使用连续赋值语句进行描述 9.采用结构描述方式描述1位全加器。 答: modulefull_add(a,b,cin,s,co); inputa,b,cin; outputs,co; wireS1,T1,T2,T3; xor X1(S1,a,b), X2(s,S1,cin); and A1(T3,a,b), A2(T2,b,cin), A3(T1,a,cin); or O1(co,T1,T2,T3); endmodule 10.initial语句与always语句的关键区别是什么? 答:1)initial语句:此语句只执行一次。 2)always语句:此语句总是循环执行,或者说此语句重复执行。 11.采用数据流方式描述2-4译码器。 答: 'timescale1ns/ns moduleDecoder2×4(A,B,EN,Z); inputA,B,EN; output[0:3]Z; 1

可编程逻辑器件与硬件描述语言

组合逻辑电路实验(一)实验报告 一.实验名称:3-8译码器设计 二.实验目的 1.掌握ISE 开发工具的使用,掌握FPGA 开发的基本步骤; 2.掌握组合逻辑电路设计的一般方法; 3.掌握程序下载方法,了解UCF 文件的格式; 4.初步了解开发板资源,掌握开发板使用方法。重点了解滑动开关和LED 显示灯的使用方法。 三.实验内容 1.用VHDL 实现3-8译码器模块 译码器电路如图2-1所示。其功能如表2-1所示。试用VHDL 实现该译码器,并在开发板上进行检验。 表2-1 译码器功能表 EN A B C Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 1 X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 3-8 译码器 A B C EN Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 图2-1 3-8译码器

0 1 1 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 2.将程序下载到FPGA并进行检验 (1)资源使用要求:用滑动开关SW3~SW1作为输入A,B,C;滑动开关SW0控制EN;8个LED灯表示8个输出。 (2)检验方法:当SW0处于ON(EN=1)位置时,所有LED灯灭;当SW0处于OFF(EN=0),反映当前输入的译码输出在LED灯上显示,即当输入为000(滑动开关SW3-SW1处于OFF状态),LED0亮,其它灯灭,等等。 四.实验步骤 1.启动ISE,新建工程文件,编写3-8译码器的VHDL模块; 2.新建UCF文件,输入位置约束; 3.完成综合、实现,生成下载文件; 4.连接开发板USB下载线,开启开发板电源; 5.下载到FPGA; 6.拨动开关,验证结果是否正确。 五.主要vhdl代码 architecture Behavioral of coder_38 is --3-8译码器行为级描述signal x:STD_LOGIC_VECTOR (2 downto 0); begin x <= A&B&C;

verilog硬件描述语言 上机

《硬件描述语言》上机作业西电微电子 \

第一题:用Verilog语言的结构描述和行为描述分别设计下面的电路。 A[0] Array B[0] A[1] B[1] A[2] B[2] 结构描述: 电路设计: module hw1(A,B,Y); input[2:0] A,B; output Y; wire w1,w2,w3; xor U1(w1,A[0],B[0]); xor U2(w2,A[1],B[1]); xor U3(w3,A[2],B[2]); nor U4(Y,w1,w2,w3); endmodule 仿真测试: module test_hw1; reg[2:0] A,B; wire Y; hw1 U1(A,B,Y); initial begin A=3'b000;B=3'b000; #50 A=3'b000;B=3'b000; #50 A=3'b111;B=3'b111; #50 A=3'b000;B=3'b110;

#50 A=3'b111;B=3'b000; #50 A=3'b110;B=3'b110; #50 A=3'b011;B=3'b010; #50 A=3'b001;B=3'b011; #50 A=3'b111;B=3'b010; #50 $stop; end initial $monitor($time,"\tA=%d\tB=%d\tY=%d",A,B,Y); Endmodule 行为描述: 电路设计: module hw2(A,B,Y); input[2:0] A,B; output Y; wire Y; assign Y=~((A[0]^B[0])||(A[1]^B[1])||(A[2]^B[2])); endmodule 仿真测试:

硬件描述语言及器件实验指导书

硬件描述语言及器件实验指导书 电子科学与技术专业组

第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,这步是将文件设置在工程里,能够正常编译和下载。

蔡觉平老师西电Verilog HDL上机大作业(硬件描述语言)_微电子学院

《Verilog HDL 数字集成电路设计原理与应用》上机作业 班级:******* 学号:******* 姓名:******* 题目1:数字集成电路的verilog HDL 描述与仿真。 要求:(1)学习使用Modelsim 设计和仿真软件; (2)练习教材7.2.1中的例子; (3)掌握设计代码和测试代码的编写; (4)掌握测试仿真流程; (5)掌握Modelsim 软件的波形验证方式。 解答: 题目2: 简述begin-end 语句块和fork-join 语句块的区别,并写出下面信号对应的程序代码 A B

解答: (1)begin-end语句块和fork-join语句块的区别: 1、执行顺序:begin-end语句块按照语句顺序执行,fork-join语句块所有语句均在同一时刻执行; 2、语句前面延迟时间的意义:begin-end语句块为相对于前一条语句执行结束的时间,fork-join语句块为相对于并行语句块启动的时间; 3、起始时间:begin-end语句块为首句开始执行的时间,fork-join语句块为转入并行语句块的时间; 4、结束时间:begin-end语句块为最后一条语句执行结束的时间,fork-join语句块为执行时间最长的那条语句执行结束的时间; 5、行为描述的意义:begin-end语句块为电路中的数据在时钟及控制信号的作用下,沿数据通道中各级寄存器之间的传送过程。fork-join语句块为电路上电后,各电路模块同时开始工作的过程。 (2)程序代码: Begin-end语句: module initial_tb1; reg A,B; initial begin A=0;B=1; #10 A=1;B=0; #10 B=1; #10 A=0; #10 B=0; #10 A=1;B=1; end endmodule Frk-join语句: module wave_tb2; reg A,B; parameter T=10; initial fork A=0;B=1; #T A=1;B=0; #(2*T) B=1; #(3*T) A=0; #(4*T) B=0; #(5*T) A=1;B=1; join endmodule

课程名称FPGA与硬件描述语言

课程名称:FPGA与硬件描述语言 课程编码:7002301 课程学分:2学分 课程学时:32学时 适应专业:电子信息工程、电子信息工程(理工科实验班) 《FPGA与硬件描述语言》 FPGA and Hardware Describing Language 教学大纲 一、课程性质与任务 性质:本课程的授课对象为电子信息工程专业二年级本科生,课程属性为专业基础必修课,该课程讲授FPGA基本原理及结构,先进的硬件描述语言(VHDL语言),FPGA设计与应用等知识。 任务:通过对(VHDL)硬件描述语言,FPGA设计等知识的学习,掌握硬件描述语言,FPGA设计的基本知识。培养学生动手能力以及解决实际问题的能力。理解VHDL语言,学会FPGA设计方法等。 二、课程教学基本内容及要求 第一章绪论VHDL的数据和表达式 (一)教学基本要求: 掌握:VHDL程序的特点,VHDL的数据,VHDL的表达式。 了解:FPGA基本原理及结构。 (二)教学基本内容: 绪论:FPGA基本原理及结构 第一章VHDL的数据和表达式 1.1 VHDL程序的特点 1.2 VHDL程序的基本结构 1.3 VHDL的数据 1.4 VHDL的表达式 第二章VHDL的顺序描述语句 (一)教学基本要求: 掌握:信号赋值语句和变量赋值语句,if语句,case语句,null语句。 理解:loop语句。 (二)教学基本内容:

第二章VHDL的顺序描述语句 2.1信号赋值语句和变量赋值语句 2.2 if语句 2.3 case语句 2.4 loop语句 2.5 null语句 第三章VHDL的并行描述语句 (一)教学基本要求: 掌握:进程语句,并发信号赋值语句,元件例化语句。 理解:条件信号赋值语句,选择信号赋值语句。 了解:生成语句。 (二)教学基本内容: 第三章VHDL的并行描述语句 3.1进程语句 3.2并发信号赋值语句 3.3条件信号赋值语句 3.4选择信号赋值语句 3.5元件例化语句 3.6生成语句 第四章VHDL的时钟信号描述方法 (一)教学基本要求: 掌握:时钟的VHDL描述方法,时序电路中复位信号的VHDL描述方法。(二)教学基本内容: 第四章VHDL的时钟信号描述方法 4.1时钟信号的VHDL描述方法 4.2时序电路中复位信号的VHDL描述方法 第五章VHDL的有限状态机的设计 (一)教学基本要求: 掌握:有限状态机的基本概念及应用。 理解:一个Moore型有限状态机的设计实例 (二)教学基本内容: 第五章VHDL的有限状态机的设计 5.1 有限状态机的基本概念 5.2一个Moore型有限状态机的设计实例

硬件描述语言与FPGA技术实验指导书(2012版)

《硬件描述语言与FPGA技术》 实验指导书 西北工业大学 2012/10/10

目录 实验一简单的组合逻辑设计 (3) 实验二简单分频时序逻辑电路的设计 (6) 实验三利用条件语句实现计数分频时序电路 (9) 实验四阻塞赋值与非阻塞赋值的区别 (12) 实验五用always块实现较复杂的组合逻辑电路 (16) 实验六在Verilog中使用函数 (20) 实验七在Verilog HDL中使用任务(task) (23) 实验八利用有限状态机进行时序逻辑的设计 (27) 实验九利用状态机实现比较复杂的接口设计 (32) 练习十利用SRAM设计一个FIFO (39)

实验一简单的组合逻辑设计 一、实验目的 1. 学习Quartus和ModSim两种EDA工具的使用方法; 2.掌握基本组合逻辑电路的实现方法; 3.初步了解两种基本组合逻辑电路的生成方法; 4.学习测试模块的编写; 5.通过综合和布局布线了解不同层次仿真的物理意义。 二、实验内容 本次实验采用Verilog HDL语言设计一个可综合的数据比较器,其功能是比较数据a与数据b的结果,如果两个数据相同,则输出结果1,否则给出结果0;并写出测试模型,使其进行比较全面的测试。 三、实验仪器、设备 预装了开发工具ModelSimSE、synplify的PC机。 四、实验原理 1.组合逻辑电路是指在任何时刻,输出状态只决定于同一时刻各输入状态的组合而与 电路以前状态无关,而与其他时间的状态无关。其逻辑函数如下: Li=f(A1,A2,A3……An) (i=1,2,3…m) 其中,A1~An为输入变量,Li为输出变量。 2.组合逻辑电路的特点归纳如下: ① 输入、输出之间没有返馈延迟通道; ② 电路中无记忆单元。 3.组合逻辑设计示例:可综合的数据比较器。它的功能是比较数据a与数据b,如果 两个数据相同,则给出结果1,否则给出结果0。描述组合逻辑时常使用assign 结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格 式。 模块源代码: //--------------- compare.v ----------------- module compare(equal,a,b);

关于硬件描述语言(VHDL和Verilog)概要

关于硬件描述语言【VHDL和Verilog】 随着EDA技术的发展,使用硬件语言设计PLD/FPGA成为一种趋势。目前最主要的硬件描述语言是VHDL和Verilog HDL。 究竟选择VHDL还是verilog HDL? 这是一个初学者最常见的问题。其实两种语言的差别并不大,他们的描述能力也是类似的。掌握其中一种语言以后,可以通过短期的学习,较快的学会另一种语言。选择何种语言主要还是看人的使用习惯。如果您是集成电路(ASIC)设计人员,则必须首先掌握verilog,因为在IC设计领域,90%以上的公司都是采用verilog进行IC设计。对于PLD/FPGA设计者而言,两种语言可以自由选择。 学习HDL的几点重要提示 1.了解HDL的可综合性问题: HDL有两种用途:系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。但如果我们的程序是用于硬件实现(例如:用于FPGA设计),那么我们就必须保证程序“可综合”(即程序的功能可以用硬件电路实现)。不可综合的HDL语句在软件综合时将被忽略或者报错。应当牢记一点:“所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用硬件实现。” 2. 用硬件电路设计思想来编写HDL: 学好HDL的关键是充分理解HDL语句和硬件电路的关系。编写HDL,就是在描述一个电路,写完一段程序以后,应当对生成的电路有一些大体上的了解,而不能用纯软件的设计思路来编写硬件描述语言。要做到这一点,需要多实践,多思考,多总结。 3.语法掌握贵在精,不在多: 30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,在程序移植或者更换软件平台时,容易产生兼容性问题,

硬件描述语言HDL的现状与发展

硬件描述语言HDL的现状与发展 摘要:从数字系统设计的性质出发,结合目前迅速发展的芯片系统,比较、研究各种硬件描述语言;详细阐述各种语言的发展历史、体系结构和设计方法;探讨未来硬件描述语言的发展趋势,同时针对国内EDA基础薄弱的现状,在硬件描述语言方面作了一些有益的思考。 关键词:ASIC 硬件描述语言HDL Verilog HDL VHDL SystemC Superlog 芯片系统SoC 引言 硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言。利用这种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构。 目前,这种高层次(high-level-design)的方法已被广泛采用。据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计。 硬件描述语言HDL的发展至今已有20多年的历史,并成功地应用于设计的各个阶段:建模、仿真、验证和综合等。到20世纪80年代,已出现了上百种硬件描述语言,对设计自动化曾起到了极大的促进和推动作用。但是,这些语言一般各自面向特定的设计领域和层次,而且众多的语言使用户无所适从。因此,急需一种面向设计的多领域、多层次并得到普遍认同的标准硬件描述语言。20世纪80年代后期,VHDL和Verilog HDL语言适应了这种趋势的要求,先后成为IEEE 标准。 现在,随着系统级FPGA以及系统芯片的出现,软硬件协调设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于与系统设计和软件设计结合。硬件描述语言为适应新的情况,迅速发展,出现了很多新的硬件描述语言,像Superlog、SystemC、Cynlib C++等等。究竟选择哪种语言进行设计,整个业界正在进行激烈的讨论。因此,完全有必要在这方面作一些比较研究,为EDA设计做一些有意义的工作,也为发展我们未来的芯片设计技术打好基础。 1 目前HDL发展状况 目前,硬件描述语言可谓是百花齐放,有VHDL、Superlog、Verilog、SystemC、Cynlib C++、C Level等等。虽然各种语言各有所长,但业界对到底使用哪一种语言进行设计,却莫衷一是,难有定论。 而比较一致的意见是,HDL和C/C++语言在设计流程中实现级和系统级都具有各自的用武之地。问题出现在系统级和实现级相连接的地方:什么时候将使用中的一种语言停下来,而开始使用另外一种语言?或者干脆就直接使用一种语言?现在看来得出结论仍为时过早。 在2001年举行的国际HDL会议上,与会者就使用何种设计语言展开了生动、激烈的辩论。最后,与会者投票表决:如果要启动一个芯片设计项目,他们愿意选择哪种方案?结果,仅有2

硬件描述语言实验报告

《硬件描述语言》实验报告 学院: 学号: 姓名: 专业: 实验时间: 实验地点: 指导教师: 年月

实验一简单组合逻辑设计 一、实验目的及要求: 1.掌握基本组合逻辑电路的实现方法。 2.初步了解两种基本组合逻辑电路的生成方法。 3.学习测试模块的编写。 4.通过综合和布局布线了解不同层次仿真的物理意义。 二、实验设备及要求 装有modesim和synplify的电脑一台 三、实验内容与步骤 1.实验内容: 本次实验采用Verilog HDL语言设计一个可综合的数据比较器,其功能是比较数据a与数据b的结果,如果两个数据相同,则输出结果1,否则给出结果0;并写出测试模型,使其进行比较全面的测试。 2.实验步骤: (1)建立工程文件,编写模块源码和测试模块,要求测试模块对源文件进行比较全面的测试; (2)编译源码和测试模块,用测试模块对源文件进行测试,并进行仿真;(3)观察综合后生成的文件和源文件的不同点和相同点。 (4)综合时采用不同的FPGA器件,观察综合后的结果有什么不同。 四、实验结果与数据处理: 1.RTL图及仿真后波形图:

2.综合后的电路图: 五、分析与讨论: 1.课本练习一的测试方法二中,第二个initial块有什么用?它与第一个initial块有什么关系? 答:测试方法二中的第二个initial用来暂停仿真以便观察仿真波形,它与第一个initial是并行关系 2.如果在第二个initial块中,没有写出#10000或者$stop,仿真会如何进行?答:如果没有写#10000,仿真会直接停止,没有$stop,仿真不会结束。

3.比较两种测试方法,哪一种更全面? 答:第二种测试方法更全面,测试了更多种的变换的情况。 实验二简单分频时序逻辑电路的设计 一、实验目的及要求: 1.掌握条件语句在简单时序模块设计中的使用; 2.掌握verilog语句在简单时序模块设计中的使用; 3.学习在Verilog模块中应用计数器; 4.学习测试模块的编写、综合和不同层次的仿真。 二、实验设备及要求 装有modesim和synplify的电脑一台 三、实验内容与步骤: 1.实验内容: (1)使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑,设计1/2分频的可综合模型。得到如下波形图: (2)对模块进行RTL级仿真、综合后门级仿真,布局布线仿真; 2.实验步骤: (1)建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试。 (2)编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真。得到波形图。 (3)观察综合后生成的文件和源文件的不同点和相同点。

verilog硬件描述语言历次实验报告

西北工业大学 《硬件描述语言》实验报告 实验一简单组合逻辑设计 (2) 实验二简单分频时序逻辑电路的设计 .............................................. 错误!未定义书签。实验三利用条件语句实现技术分频时序电路.................................... 错误!未定义书签。实验四阻塞赋值与非阻塞赋值的区别 .............................................. 错误!未定义书签。实验五用always块实现较复杂的组合逻辑电路 ............................... 错误!未定义书签。实验六在V erilog HDL中使用函数 .................................................. 错误!未定义书签。实验七在V erilog HDL中使用任务 .................................................. 错误!未定义书签。实验八利用有限状态机进行时序逻辑的设计.................................... 错误!未定义书签。 学院:计算机学院 学号: 姓名: 专业:计算机科学与技术 实验时间: 2011.11 实验地点:实验大楼 指导教师: 西北工业大学 2011 年11 月

实验一简单组合逻辑设计 实验日期:实验成绩:指导老师: 一.实验目的: 1.掌握基本组合逻辑电路的实现方法。 2.初步了解两种基本组合逻辑电路的生成方法。 3.学习测试模块的编写。 4.通过综合和布局布线了解不同层次仿真的物理意义。 二.实验设备: 安装Modelsim-6.5c的PC机。 三.实验内容: 描述一个可综合的数据比较器,比较数据a 、b的大小,若相同,则给出 结果1,否则给出结果0 四.实验代码 module compare(equal,a,b); input a,b; output equal; assign equal=(a==b)?1:0; endmodule `timescale 1ns/1ns module t; reg a,b; wire equal; initial begin a=0; b=0;

蔡觉平老师西电VerilogHDL上机大作业硬件描述语言_微电子学院

《Verilog HDL数字集成电路设计原理与应用》上机作业******* 班级:******* 学号:******* 姓名: verilog HDL描述与仿真。题目1:数字集成电路的设计和仿真软件;(1)学习使用Modelsim要求:中的例子;2)练习教材7.2.1 ((3)掌握设计代码和测试代码的编写; (4)掌握测试仿真流程; Modelsim软件的波形验证方式。(5)掌握 解答: 语句块的区别,并写出下面信号语句块和begin-endfork-join:题目2 简述对应的程序代码AB500ns40201030 解答: (1)begin-end语句块和fork-join语句块的区别: 1、执行顺序:begin-end语句块按照语句顺序执行,fork-join语句块所有语句均在同一时刻执行; 2、语句前面延迟时间的意义:begin-end语句块为相对于前一条语句执行结束的时间,fork-join语句块为相对于并行语句块启动的时间; 3、起始时间:begin-end语句块为首句开始执行的时间,fork-join语句块为转入并行语句块的时间; 4、结束时间:begin-end语句块为最后一条语句执行结束的时间,fork-join 语句块为执行时间最长的那条语句执行结束的时间; 5、行为描述的意义:begin-end语句块为电路中的数据在时钟及控制信号的作

用下,沿数据通道中各级寄存器之间的传送过程。fork-join语句块为电路上电后,各电路模块同时开始工作的过程。 (2)程序代码: Begin-end语句: module initial_tb1; reg A,B; initial begin A=0;B=1; #10 A=1;B=0; #10 B=1; #10 A=0; #10 B=0; #10 A=1;B=1; end endmodule Frk-join语句: module wave_tb2; reg A,B; parameter T=10; initial fork A=0;B=1; #T A=1;B=0; #(2*T) B=1; #(3*T) A=0; #(4*T) B=0; #(5*T) A=1;B=1; join endmodule 3. 分别用阻塞和非阻塞赋值语句描述如下图所示移位寄存器的电路图。题目out2out1out0 dinout3QQDDQQD clk 解答:)阻塞赋值语句(1module block2(din,clk,out0,out1,out2,out3);input din,clk; output out0,out1,out2,out3;reg out0,out1,out2,out3;always@(posedge clk)begin out0=din; out1=out0; out2=out1; out3=out2;

阎石《数字电子技术基础》(第5版)(课后习题 硬件描述语言简介)【圣才出品】

第9章 硬件描述语言简介 9.1 用Verilog HDL 语言的结构描述方式,描述图9-1所示电路的逻辑功能。 图9-1 解:由图9-1可知 Result () A B C =?+Verilog HDL 描述语言为 9.2 用 Verilog HDL 语言实现对题4.6所要设计电路的逻辑功能描述。解:由题4.6的结论可知,所要描述的电路如图9-2所示。 图9-2 Verilog HDL 描述语言为

module control (A,B,C,L,S); input A,B,C; output L,S; wire Bnot; wire T; not G 1(Bnot,B); and G 2(T,Bnot,C); or G 3(S,A,T); buf G 4(L,B); endmodule 9.3 用Verilog HDL 语言描述一个4 选1数据选择器。解:4选1数据选择器的功能如图9-3所示。 图9-3

Verilog HDL描述语言为 module MUX4_to_1 (A,B,C,D,S1,S0,Y,YN); input A,B,C,D,S1,S0; output Y,YN; wire AT,BT; assign AT = S0 ? D : C; assign BT = S0 ? B : A; assign Y = (S1 ? AT : BT); assign YN = ~Y; endmodule 9.4 用Verilog HDL语言描述一个4位超前进位加法器。 解://主模块

//1位全加器模块 //通过A0、B0、CI计算C1 //通过A0、B0、A1、B1和CI计算C2 //通过A0、B0、A1、B1、A2、B2和CI计算C3

硬件描述语言试题

2007/2008 学年第一学期末考试试题(A卷) 硬件描述语言及器件 使用班级:05182401/2/3 一、填空题(20分,每空格1分) 1、VHDL是否区分大小写?。 2、digital_ _8标识符合法吗?。12_bit标识符合法吗?。 signal标识符合法吗?。 3、结构体有三种描述方式,分别是、、和。 4、请分别列举一个常用的库和程序包、。 5、一个信号处于高阻(三态)时的值在VHDL中描述为。 6、将一个信号width定义为一个4位标准逻辑向量的语句为 。 7、/=是操作符,功能是。 8、设D0为'0', D1为'1', D2为'1', D3为'0', D3 & D2 & D1 & D0的运算结果是 ,(D3 or D2)and(D1 and not D0)的运算结果是:。 9、赋值语句是(并行/串行)执行的,if语句是(并行/串行)执行的。 10、请列举三种可编程逻辑器件:、、。

二、简答(20分,每小题5分) 1、简述VHDL程序的基本结构。 2、简述信号与变量的区别。 3、简述可编程逻辑器件的优点。 4、试比较moore状态机与mealy状态机的异同。

三、判断题(10分) library ieee; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; 以上库和程序包语句有无错误?,有的话请在原程序相应位置改正。 entity rom is port( addr: in std_logic_vector(0 to 3); ce: in std_logic; data:out std_logic_vector(7 downto 0); ) end rom; 以上port语句有无错误?,有的话请在原程序相应位置改正。 architecture behave of rom is begin process begin if ce='0' then case addr is when "0000"=> data<="10001001"; when "0001"=> data<="10001010"; when "0010"=> data<="10001011"; when "0011"=> data<="10001100"; when "0100"=> data<="10001101";

EDA应用技术 硬件描述语言Verilog HDL

第3章硬件描述语言Verilog HDL EDA 应用技术 EDA应用技术 3.1 引言 3.1 引言 内容概要 3.1 引言 3.1 引言

3.1 引言形式化地表示电路的行为和结构;3.2 Verilog HDL基本结构 内容概要 3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构

3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构 [例3.2.5 ?Verilog HDL endmodule声明语句中。模块是可以进行层次嵌套的。 3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构 Verilog

3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构 Verilog 3.2 Verilog HDL基本结构 3.2 Verilog HDL基本结构 HDL语言描述的“东西”都通过其名字来识别, 3.2 Verilog HDL基本结构 六、编写Verilog

3.2 Verilog HDL基本结构1语汇代码的编写标准 3.2 Verilog HDL基本结构 1语汇代码的编写标准(续) 3.2 Verilog HDL基本结构 2综合代码的编写标准 3.2 Verilog HDL基本结构 (6)描述组合逻辑的always块,一定不能有不完全赋值,即所有输出变 2综合代码的编写标准(续1) 3.2 Verilog HDL基本结构 (10)避免生成不想要的触发器。 2综合代码的编写标准(续2) 3.2 Verilog HDL基本结构 2综合代码的编写标准(续3)

硬件描述语言课程教学大纲(2016版v2)

硬件描述语言 (Hardware Description Language) 课程编号:109232学分: 2 开课单位:电子信息工程学院总学时:32 课程类别:专业课课程性质:必修 注:课程类别是指通识类平台课/学科平台课/专业核心课/专业课/;课程性质是指必修/限选/任选 一、课程的性质和目的 课程性质:本课程是电子信息工程及通信工程专业的必修课,主要介绍Verilog语言基本语法和设计思想,熟悉FPGA开发流程,培养学生应用Verilog及EDA工具开发设计数字系统的基本方法及技术,具有很强的工程实践性。 目的:使学生通过对Verilog语言及FPGA开发技术的学习和训练,获得现代硬件数字电路的软件化设计方法,了解并初步掌握当代数字电子技术设计领域的最新技术,为学生在数字技术领域的进一步深入探索和创新奠定基础。 二、课程教学内容及基本要求 掌握Verilog语言的程序结构、基本描述语句及描述方法,熟悉行为级描述、结构级描述和开关级描述的要求和特点,掌握采用硬件描述语言描述各层次的方法,熟悉EDA实验开发系统的使用;掌握小型数字系统的Verilog设计技术。 (一)课程教学内容及知识模块顺序 1.知识单元一绪论(2学时) (1)知识点一:集成电路设计技术的发展 (2)知识点二:硬件描述语言Verilog HDL与VHDL (3)知识点三:FPGA/CPLD简介 教学基本要求: 本章为介绍性内容,要求了解硬件描述语言的特点,掌握CPLD/FPGA的发展历史和两者的区别,理解ASIC、SOPC等的含义。 2.知识单元二: Verilog HDL基础(8学时) (1)知识点一:模块的概念 (2)知识点二:Verilog HDL基本语法 (3)知识点三:运算符及表达式

硬件描述语言实验报告五

实验五 有限状态机 一、实验目的 本次实验通过Verilog硬件语言编写摩尔型有限状态机和米勒型有限状态机,掌握采用有限状态机产生各种控制信号的原理,熟悉如何选用合适的有限状态机进行电路设计,通过实验进一步了解原理图编辑方法和仿真方法。 二、实验要求 1、利用Verilog硬件语言,参考提供的源程序,设计一个采用摩尔型有限状态机实现的流水灯控制程序; 2、利用Verilog硬件语言,参考提供的源程序,设计一个采用米勒型有限状态机实现的串行口发送程序; 3、利用Verilog硬件语言,参考提供的源程序,设计一个采用米勒型有限状态机实现的串行口接收程序; 4、利用原理图编辑方法,将串行口发送和接收模块进行连接,实现完整的串行通信电路,并对该电路进行仿真。 三、实验设计 1.摩尔型有限状态机实现的流水灯源程序: module sled(clk,led); input clk; output[7:0]led; reg[7:0]led; reg[2:0]state; parameter s0=3'b000, s1=3'b001, s2=3'b010, s3=3'b011, s4=3'b100, s5=3'b101, s6=3'b110, s7=3'b111;always@(posedge clk) case(state) s0:begin state<=s1;led<=8'b00000001;end s1:begin state<=s2;led<=8'b00000010;end s2:begin state<=s3;led<=8'b00000100;end s3:begin state<=s4;led<=8'b00001000;end s4:begin state<=s5;led<=8'b00010000;end s5:begin state<=s6;led<=8'b00100000;end s6:begin state<=s7;led<=8'b01000000;end s7:begin state<=s0;led<=8'b10000000;end endcase endmodule 仿真结果: 1

硬件描述语言verilog简答题

1.assign always initial区别 always过程反复执行其中的块语句,而initial过程语句只执行一次。 assign声明用于描述组合逻辑。在always语句中,“=”表示阻塞赋值,<=表示非阻塞赋值 Assign语句应该在always语句外部使用,而且是并行计算值。在组合逻辑中使用阻塞式赋值,而在时序逻辑中需要使用非阻塞式赋值。initial语句在模拟开始时执行体内的语句, 2.触发器,锁存器,寄存器区别 触发器:包括锁存器和寄存器。锁存器:电平触发的存储单元,在有效电平时间里可以多次改变数据.优点是占触发器资源少,缺点是容易产生毛刺。在FPGA中用的很少,因为FPGA中触发器的资源非常丰富。寄存器:边沿触发的存储单元,在上升或下降沿数据变化,一个周期里只能变化一次。 3.测试程序的作用: 测试程序是用于测试其他待测试模块的硬件描述语言模块。此程序包含了向待测试模块提供输入的语句,已测试是否产生了理想的正确输出。输入和期待的输出模式成为测试向量。 4时序图定义: 答:时序图是显示了缓冲器的一个输入改变和随后输出的改变所产生的延迟的图,她描绘了输入改变时缓冲器电路的瞬间响应。 5.两种时序电路,(怎么样判断同步时序电路) 同步时序电路:如果一个由多个元件连接构成电路是同步时序电路,需满足:每一个电路元件是寄存器或组合电路,至少有一个电路元件是寄存器 所有寄存器接收同一个时钟信号,每一个环路至少包含一个寄存器 非同步时序电路称为异步电路。 6.什么是组合电路(组合电路的判断条件),什么是时序电路 答:组合电路的输出仅仅取决输入的值。时序电路的输出取决于当前的输入值和之前的输入值。组合电路没有记忆,时序电路是有记忆的。 如果一个电路由互相连接的电路组件构成,在满足以下条件时,它就是组合电路。 一,每一个电路组件本身都是组合电路 二,每一个电路节点或者是一个电路的输入,或者仅仅连接到一个电路组件的一个输出端口。 三,电路不能包含回路:进过电路的每条路径最多只能经过每个电路一次。 7.MIPS体系结构设计的四个准备/指令格式设计原则4条: 简单设计有助于规整化 加快常见功能 越小的设计越快 好的设计需要好的折中

Verilog HDL语言的描述语句

第4节Verilog HDL语言的描述语句Verilog HDL 描述语句 2.4.1 结构描述形式 通过实例进行描述的方法,将Verilog HDL预先定义的基本单元实例嵌入到代码中,监控实例的输入。Verilog HDL中定义了26个有关门级的关键字,比较常用的有8个。 在实际工程中,简单的逻辑电路由逻辑门和开关组成,通过门元语可以直观地描述其结构。 基本的门类型关键字如下所述: ?and ?nand ?nor ?or ?xor ?xnor ?buf ?not Verilog HDL支持的基本逻辑部件是由该基本逻辑器件的原语提供的。其调用格式为: 门类型<实例名> (输出,输入1,输入2,……,输入N) 例如,nand na01(na_out, a, b, c ); 表示一个名字为na01的与非门,输出为na_out,输入为a, b, c。 例2-5 一个简单的全加器例子: module ADD(A, B, Cin, Sum, Cout); input A, B, Cin; output Sum, Cout; // 声明变量 wire S1, T1, T2, T3; xor X1 (S1, A, B), X2 (Sum, S1, Cin); and A1 (T3, A, B), A2 (T2, B, Cin), A3 (T1, A, Cin); or O1 (Cout, T1, T2, T3);

endmodule 在这一实例中,模块包含门的实例语句,也就是包含内置门xor、and和or的实例语句。门实例由线网型变量S1、T1、T2和T3互连。由于未指定顺序,门实例语句可以以任何顺序出现。 门级描述本质上也是一种结构网表。在实际中的使用方式为:先使用门逻辑构成常用的触发器、选择器、加法器等模块,再利用已经设计的模块构成更高一层的模块,依次重复几次,便可以构成一些结构复杂的电路。其缺点是:不易管理,难度较大且需要一定的资源积累。 2.4.2 数据流描述形式 数据流型描述一般都采用assign连续赋值语句来实现,主要用于实现组合功能。连续赋值语句右边所有的变量受持续监控,只要这些变量有一个发生变化,整个表达式被重新赋值给左端。这种方法只能用于实现组合逻辑电路。其格式如下: assign L_s = R_s; 例2-6 一个利用数据流描述的移位器 module mlshift2(a, b); input a; output b; assign b = a<<2; endmodule 在上述模块中,只要a的值发生变化,b就会被重新赋值,所赋值为a左移两位后的值。 2.4.3 行为描述形式 行为型描述主要包括过程结构、语句块、时序控制、流控制等4个方面,主要用于时序逻辑功能的实现。 1.过程结构 过程结构采用下面4种过程模块来实现,具有强的通用型和有效性。 ?initial模块 ?always模块 ?任务(task)模块 ?函数(function)模块

相关主题
文本预览
相关文档 最新文档