当前位置:文档之家› 西工大硬件描述语言实验报告

西工大硬件描述语言实验报告

西工大硬件描述语言实验报告
西工大硬件描述语言实验报告

硬件描述语言实验报告

班级: xxxxxxxx

学号: xxxxxxxx

姓名: xxxxxxxx

目录

硬件描述语言 ············································································································· - 0 - 实验报告 ························································································································· - 0 - 实验一简单组合逻辑设计 ························································································· - 2 - 实验二简单分频时序逻辑电路的设计······································································ - 4 - 实验三利用条件语句实现计数分频时序电路·························································· - 7 - 实验四阻塞赋值与非阻塞赋值的区别···································································· - 12 - 实验五用always块实现较复杂的组合逻辑电路··················································· - 16 - 实验六在Verilog中使用函数 ·················································································· - 21 - 实验七在Verilog HDL中使用任务(task) ·································································· - 25 - 实验八利用有限状态机进行时序逻辑的设计························································ - 32 - 实验九利用状态机实现比较复杂的接口设计························································ - 36 - 实验十利用SRAM设计一个FIFO ··········································································· - 46 -

实验一简单组合逻辑设计

一、实验目的

1.掌握基本组合逻辑电路的实现方法。

2.初步了解两种基本组合逻辑电路的生成方法。

3.学习测试模块的编写。

4.通过综合和布局布线了解不同层次仿真的物理意义。

二、实验内容

本次实验采用Verilog HDL语言设计一个可综合的数据比较器,其功能是比较数据a与数据b的结果,如果两个数据相同,则输出结果1,否则给出结果0;并写出测试模型,使其进行比较全面的测试。

三、实验步骤

1.建立工程文件,编写模块源码和测试模块,要求测试模块对源文件进行比较全面的测试;

2.编译源码和测试模块,用测试模块对源文件进行测试,并进行仿真;

3.观察综合后生成的文件和源文件的不同点和相同点。

4.综合时采用不同的FPGA器件,观察综合后的结果有什么不同。

四、实验代码

1.模块源码

module compare(equal, a, b);

input a,b;

output equal;

assign equal = (a == b)?1:0;

endmodule

2.测试代码

`timescale 1ns/1ns

module compare_t;

reg a, b;

wire equal;

initial

begin

a=0;

b=0;

#100 a=0; b=1;

#100 a=1; b=1;

#100 a=1; b=0;

#100 a=0; b=0;

#100 $stop;

end

compare m(.equal(equal),.a(a),.b(b));

endmodule

五、综合仿真

RTL图及仿真后波形图:

六、思考题

1.课本练习一的测试方法二中,第二个initial块有什么用?它与第一个

initial块有什么关系?

测试方法二中的第二个initial用来暂停仿真以便观察仿真波形,它与第一个initial是并行关系

2.如果在第二个initial块中,没有写出#10000或者$stop,仿真会如何进行?

如果没有写#10000,仿真会直接停止,没有$stop,仿真不会结束。

3.比较两种测试方法,哪一种更全面?

第二种测试方法更全面,测试了更多种的变换的情况。

实验二简单分频时序逻辑电路的设计

一、实验目的

1.掌握条件语句在简单时序模块设计中的使用;

2.掌握verilog语句在简单时序模块设计中的使用;

3.学习在Verilog模块中应用计数器;

4.学习测试模块的编写、综合和不同层次的仿真。

二、实验内容

1.使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑,设计1/2分频的可综合模型。得到如下波形图:

2.对模块进行RTL级仿真、综合后门级仿真,布局布线仿真;

三、实验步骤

1.建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试。

2.编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真。得到波形图。

3.观察综合后生成的文件和源文件的不同点和相同点。

4.记录数据并完成实验报告。

四、实验代码

1.模块代码

module half_clk(reset,clk_in,clk_out);

input clk_in,reset;

output clk_out;

reg clk_out;

always @(posedge clk_in)

begin

if(!reset)

clk_out=0;

else

clk_out=~clk_out;

end

endmodule

2.测试代码

`timescale 1ns/100ps

`define clk_cycle 50

module top;

reg clk,reset;

wire clk_out;

always #`clk_cycle clk=~clk;

initial

begin

clk=0;

reset=1;

#10 reset=0;

#110 reset=1;

#100000 $stop;

end

half_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out));

endmodule

五、综合仿真

RTL图以及仿真后波形图

六、思考题

1.如果没有reset信号,能否控制2分频clk_out信号的相位?

如果没有reset信号,则无法控制2分频clk_out信号的相位。

2.只用clk时钟沿的触发(即不用2分频产生的时钟沿)如何直接产生4分频、8分频、或者16分频的时钟?

借助一个整型变量j做计数操作。

3.如何只用clk时钟沿的触发直接产生占空比不同的分频时钟?

借助一个整型变量j做计数操作,从而用clk时钟沿的触发直接产生4分频、8分频或者16分频的时钟,及产生占空比不同的分频时钟。

实验三利用条件语句实现计数分频时序电路

一、实验目的

1.掌握条件语句在简单时序模块设计中的使用;

2.掌握最基本时序电路的实现方法;

3.学习在Verilog模块中应用计数器;

4.学习测试模块的编写、综合和不同层次的仿真。

二、实验内容

1.复习课本,熟悉条件语句的使用方式;

2.建立工程并编写源代码;

3.综合并布局布线仿真并分析always语句在时序逻辑中的作用;

4.学习测试模块的编写、综合和仿真。

三、实验步骤

1.建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试;

2.编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真;

3.观察综合后生成的文件和源文件的不同点和相同点;

4.综合时采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III 系列,观察综合后的结果有什么不同。

四、实验代码

1.模块代码

module fdivision(RESET,F10M,F500K);

input F10M,RESET;

output F500K;

reg F500K;

reg [7:0]j;

always @(posedge F10M)

if(!RESET) //低电平复位。

begin

F500K <= 0;

j <= 0;

end

else

begin

if(j==19) //对计数器进行判断,以确定F500K信号是否反转。

begin

j <= 0;

F500K <= ~F500K;

end

else

j <= j+1;

end

endmodule

2.测试代码

`timescale 1ns/100ps

`define clk_cycle 50

module division_top;

reg F10M,RESET;

wire F500K_clk;

always #`clk_cycle F10M=~F10M;

initial

begin

RESET=1;

F10M=0;

#100 RESET=0;

#100 RESET=1;

#10000 $stop;

end

fdivision fdivision(.RESET(RESET),.F10M(F10M),.F500K(F500K_clk)); endmodule

五、综合仿真

RTL图以及仿真后波形图:

六、思考题

1.考虑如何实现任意数值分频。

任意分频代码:

module divn(clk,rst_n,o_clk);

input clk,rst_n;

output o_clk;

parameter WIDTH = 3;

parameter N = 5;

reg [WIDTH-1:0] cnt_p,cnt_n; //count_pose,count_nege

reg clk_p,clk_n;

assign o_clk = (N==1)? clk : (N[0])?(clk_p&clk_n) :clk_p;

//如果N=1,o_clk=clk; 如果N为偶数,o_clk=clk_p; 如果N为奇数,o_clk=clk_p & clk_n,

//之所以是相与运算,是因为clk_p和clk_n两者高电平比低电平多一个clk,而两者相//差半个clk,相与结果使o_clk占空比为50%

always @ (posedge clk or negedge rst_n)

begin

if(!rst_n)

cnt_p<=0;

else if (cnt_p==(N-1))

cnt_p<=0;

else

cnt_p<=cnt_p+1;

end

always @ (posedge clk or negedge rst_n)

begin

if(!rst_n)

clk_p<=0;

else if (cnt_p<(N>>1))

clk_p<=0;

else

clk_p<=1;

end

always @ (negedge clk or negedge rst_n)

begin

if(!rst_n)

cnt_n<=0;

else if (cnt_n==(N-1))

cnt_n<=0;

else

cnt_n<=cnt_n+1;

end

always @ (negedge clk or negedge rst_n)

begin

if(!rst_n)

clk_n<=0;

else if (cnt_n<(N>>1))

clk_n<=0;

else

clk_n<=1;

end

endmodule

3.如果综合时采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,想想综合后的结果有什么不同?

时钟分频的实现方法如果是采用行波时钟的方式(异步设计),容易造成时钟偏差,很难控制芯片内部的逻辑基本单元中的触发器的建立/保持时间,同时不同芯片的内部参数也有所不同,同一代码的时序分析结果分析得不同也很正常。

如果分频后的时钟作为后级设计的工作时钟,那么整个设计不只使用一个主时钟,而是用多个时钟来实现的话(异步设计),存在信号的跨时钟域转换问题,跨时钟域的信号如果设计不当,会采到亚稳态。

3.课后自己试着利用10MB的时钟,设计一个单周期形状的周期波形。

模块代码:

module zhouqiwave(reset,F10M,a);

input reset,F10M;

output a;

reg a;

reg [15:0]b;

always@(reset or posedge F10M)

if(!reset)

begin

a<=0;

b<=0;

end

else

begin

if(b==199)

begin

a<=~a;

b<=b+1;

end

else

begin

if(b==299)

begin

a<=~a;

b<=b+1;

end

if(b==499)

begin

a<=0;

b<=b+1;

end

else

b<=b+1;

end

end

endmodule

测试代码:

`timescale 10ns/10ns

module zhouqiwave_tb;

reg F10M,reset;

wire a;

always #5 F10M=~F10M;

initial

begin

reset=0;

F10M=0;

#5 reset=1;

#6000 $stop;

end

zhouqiwave m(.reset(reset),.F10M(F10M),.a(a));

endmodule

实验四阻塞赋值与非阻塞赋值的区别

一、实验目的

1.通过实验,掌握阻塞赋值与非阻塞赋值的概念与区别;

2.深入理解顺序执行和并发执行的概念。

3.了解非阻塞和阻塞赋值的不同使用场合;

4.学习测试模块的编写,综合和不同层次的仿真。

二、实验内容

1.本次实验参照课本上的练习三,采用Verilog HDL语言描述两个模块,分别包

含有阻塞和非阻塞赋值语句;

2.编写测试模块,在相同输入信号的条件下,比较阻塞与非阻塞语句的输出结果;

3.对模块进行RTL级仿真、综合后门级仿真,布局布线仿真;

4.分析阻塞赋值与非阻塞赋值的区别。

三、实验步骤

1.仔细阅读课本,建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试;

2.编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真;

3.观察综合后生成的两个电路结构图并观察仿真波形图,分析阻塞与非阻塞赋值的异同

4.综合时采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III 系列,观察综合后的结果有什么不同。

四、实验代码

模块代码:

a) 采用阻塞赋值

module blocking(clk,a,b,c);

output [3:0] b,c;

input [3:0] a;

input clk;

reg [3:0] b,c;

always @(posedge clk)

begin

b = a;

c = b;

$display("Blocking: a = %d, b = %d, c = %d.",a,b,c);

end

endmodule

b) 采用非阻塞赋值

module non_blocking(clk,a,b,c);

output [3:0] b,c;

input [3:0] a;

input clk;

reg [3:0] b,c;

always @(posedge clk)

begin

b <= a;

c <= b;

$display("Non_Blocking: a = %d, b = %d, c = %d.",a,b,c);

end

endmodule

测试代码:

`timescale 1ns/100ps

`include"./blocking.v"

`include"./non_blocking.v"

module compareTop;

wire [3:0] b1,c1,b2,c2;

reg [3:0] a;

reg clk;

initial

begin

clk=0;

forever #50 clk=~clk;

end

initial

begin

a=4'h3;

$display("____________");

# 100 a=4'h7;

$display("____________");

# 100 a=4'hf;

$display("____________");

# 100 a=4'ha;

$display("____________");

# 100 a=4'h2;

$display("____________");

# 100 $display("____________");

$stop;

End

non_blocking non_blocking(clk,a,b2,c2);

blocking blocking(clk,a,b1,c1);

endmodule

五、综合仿真

六、思考题

1.解释说明测试模块中forever语句后若有其他语句,是否能够执行?为什么?

不能。forever循环语句常用于产生周期性的波形,用来作为仿真测试信号。它与always不同之处在于它不能独立写在程序中,而必须写在initial块中。

2.在blocking模块中按如下两种方法,仿真与综合的结果会有什么样的变化?作出仿真波形,分析综合结果。

a)

always@(posedge clk)

begin

c=b;

b=a;

end

可以实现与上面非阻塞赋值相同的赋值结果。

b)

always@(posedge clk)b=a;

always@(posedge clk)c=b;

有可能出现竞争现象。

实验五用always块实现较复杂的组合逻辑电路

一、实验目的

1.掌握用always实现较大组合逻辑电路的方法;

2.进一步了解assign与always两种组合电路实现方法的区别和注意点;

3.学习测试模块中随机数的产生和应用;

4.学习综合不同层次的仿真,并比较结果。

二、实验内容

1.运用always语句块设计一个8位数据选择器。要求:每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应地变化;

2.写出测试模块,对模块的功能进行测试;

3.对模块进行RTL级仿真、综合后门级仿真,布局布线仿真。

三、实验步骤

1.仔细阅读课本,建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试;

2.编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真;

3.观察综合后生成的两个电路结构图并观察仿真波形图,分析assign与always 两种组合电路实现方法的区别和注意点;

4.综合时采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III 系列,观察综合后的结果有什么不同。

四、实验代码

1.模块代码:

`define plus 3'd0

`define minus 3'd1

`define band 3'd2

`define bor 3'd3

`define unegate 3'd4

//通过对指令的判断,对输入数据执行相应的操作,包括加、减、与、或和求反

//无论是指令作用的数据还是指令本身发生变化,结果都要作出及时的反应。module alu(out,opcode,a,b);

output[7:0] out;

reg[7:0] out;

input[2:0] opcode;

input[7:0] a,b; //操作数。

always@(opcode or a or b) //电平敏感的always块

begin

case(opcode)

`plus: out = a+b; //加操作

`minus: out = a-b; //减操作

`band: out = a&b; //求与

`bor: out = a|b; //求或

`unegate: out=~a; //求反

default: out=8'hx; //未收到指令时,输出任意态

endcase

end

endmodule

2.测试代码:

`timescale 1ns/1ns

`include "./alu.v"

module alutest;

wire[7:0] out;

reg[7:0] a,b;

reg[2:0] opcode;

parameter times=5;

initial

begin

a={$random}%256; //Give a radom number blongs to [0,255]

b={$random}%256; //Give a radom number blongs to [0,255]

opcode=3'h0;

repeat(times)

begin

#100 a={$random}%256; //Give a radom number.

b={$random}%256; //Give a radom number.

opcode=opcode+1;

end

#100 $stop;

end

alu alu1(out,opcode,a,b);

endmodule

五、综合仿真

六、思考题

1.分析用assign语句和always语句进行组合逻辑设计时有什么异同点?

verilog语言中的赋值语句有两种,一种是持续赋值语句(assign语句),另一种是过程赋值语句(always语句)。

持续赋值语句(assign语句)主要用于对wire型变量的赋值,因为wire的值不能存住,需要一直给值,所以需要用持续赋值。

过程赋值语句(always语句)主要用于reg 型变量的赋值,因为always语句被执行是需要满足触发条件的,所以always过程块里面的内容不是每时每刻都被执行,因此需要将被赋值的对象定义成寄存器类型,以便这个值能被保持住。过程赋值又分为阻塞赋值“=”和非阻塞赋值“<=”两种。

2.使用always块设计一个八功能的算术运算单元,其输入信号a和b均为4位,还有功能选择select为3位,输出信号为out(5位)。算术运算单元所执行的操作与select信号有关,具体关系如下表所列(忽略输出结果中的上溢和下溢位):

VHDL实验报告

《创新实验》实验报告 —基于VHDL的编程和硬件实现

一、实验目的 1.熟悉和掌握硬件描述语言VHDL的基本语法及编写; 2.掌握软件Xilinx ISE 10.1的使用; 3.熟悉SDZ-6电子技术实验箱的使用; 4.了解节拍脉冲发生器等基本电路的实现; 5.了解八位二进制计数器的功能与设计; 6.学习键盘和七段数码管显示的控制和设计。 二、实验内容 1.Xilinx ISE 10.1软件的使用; 2.节拍脉冲发生器等基本电路的实现; 3.八位二进制计数器的实现 4.键盘扫描及显示的实现 三、实验器材 1、PC机 2、SDZ-6电子技术实验箱 3、正负5V电源 4、I/O接口线 四、软件的使用 在安装Xilinx10.1软件时,需要一个ID号,其实这个ID号是可以重复使用的,几个同学在官网注册后就可以共享ID号了。 安装完成之后就可以使用这个软件编写相应的VHDL的程序。 1.新建工程 File—>New Project 弹出下面的对话框 输入工程名后单击Next。然后根据本实验的实验箱进行以下设置。

以后的步骤一般都是单击Next(有些资料上会介绍有些这些步骤的具体功能,但对于本实验不必用到),最后单击Finish,完成新建一个工程。在窗口的左边会出现刚刚新建的工程,如下: 2.新建一个VHDL的源文件。 在上图中,右击工程选择New Source ,弹出如下对话框。

在对画框的左边选择VHDL Module,输入文件的名字(改名字最好是你定义的实体的名字)。单击Next。出现下面的对话框。 该对话框主要是对外部端口的编辑。可以直接跳过,即单击Next,在源文件上编辑端口。然后在接下来的对话框中单击Finish。完成建立一个源文件。窗口右边就会出现刚才编辑的源文件。 3.编写和编译代码 将事先编好的代码复制到源文件里,然后保存文件。 选中左边的文件名,在窗体的左边出现如下编辑文档内容。

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

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

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

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

组合逻辑电路实验(一)实验报告 一.实验名称: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;

实验3 基于硬件描述语言的电路设计

实验3 基于硬件描述语言的电路设计 一、实验目的 1 、了解可编程数字系统设计的流程; 2 、掌握Quartus II 软件的使用方法; 3 、掌握采用硬件描述语言设计数字系统的方法和流程。 二、实验设备 1、计算机:Quartus II 软件 2、Altera DE0 三、实验内容 要求1:学习并掌握硬件描述语言(VHDL或Verilog HDL);熟悉门电路的逻辑功能,并用硬件描述语言实现门电路的设计。参考“参考内容1”中给出的与门源程序,编写一个异或门逻辑电路。 1)用QuartusII波形仿真验证; 2)下载到DE0开发板验证。 要求2:熟悉中规模器件译码器的逻辑功能,用硬件描述语言实现其设计。参考“参考内容2”中给出的将8421BCD码转换成0-9的七段码译码器源程序,编写一个将二进制码转换成0-F 的七段码译码器。 1)用QuartusII波形仿真验证; 2)下载到DE0开发板,利用开发板上的数码管验证。 要求3:熟悉时序电路计数器的逻辑功能,用硬件描述语言实现其设计。参考“参考内容3”中给出的四位二进制加减计数器的源程序,编写一个计数器。 1)用QuartusII波形仿真验证; 2)下载到DE0开发板验证。 要求4:熟悉分频电路的逻辑功能,并用硬件描述语言实现其设计。参考“参考内容4”中给出的50M分频器的源程序,编写一个能实现占空比50%的5M和50M分频器即两个输出,输出信号频率分别为10Hz和1Hz。 1)下载到DE0开发板验证。(提示:利用DE0板上已有的50M晶振作为输入信号,通过开发板上两个的LED灯观察输出信号)。电路框图如下: 四、实验结果 1、用硬件描述语言(VHDL 或Verilog HDL)实现一个异或门电路。 VHDL源程序: Library ieee; use ieee.std_logic_1164.all;

硬件描述语言范例

硬件描述语言语言设计实例 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 ) begin case ( a ) //编码器某一输入端口为高电平输出相应的3位二进制数 8'b0000_0001 : b<=3'b000; //0 8'b0000_0010 : b<=3'b001; //1 8'b0000_0100 : b<=3'b010; //2 8'b0000_1000 : b<=3'b011; //3 8'b0001_0000 : b<=3'b100; //4 8'b0010_0000 : b<=3'b101; //5 8'b0100_0000 : b<=3'b110; //6 8'b1000_0000 : b<=3'b111; //7 default : b<= 3'b000; //其他情况编码器输出3’b000 endcase end 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表明条件的优先级顺序 begin A <= 3'b111; GS <= 1; EO <= 1; end else if ( I[7] == 0 ) begin A <= 3'b000;

课程名称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型有限状态机的设计实例

数字电子技术实验报告_基于Quartus II的硬件描述语言电路设计

数字电子技术基础 实验报告 题目:实验四基于Quartus II的硬件描述语言电路 设计 小组成员: 小组成员:

一、实验四基于Quartus II的硬件描述语言电路设 计 一、实验目的 1)学习并掌握硬件描述语言VHDL;熟悉门电路的逻辑功能,并用硬件描述语言 实现门电路的设计。 2)熟悉中规模器件译码器的逻辑功能,用硬件描述语言实现其设计。 3)熟悉时序电路计数器的逻辑功能,用硬件描述语言实现其设计。 4)熟悉分频电路的逻辑功能,并用硬件描述语言实现其设计。 二、实验要求 要求1:参考“参考内容1”中给出的与门源程序,编写一个异或门逻辑电路。1)用QuartusII波形仿真验证;2)下载到DE0开发板验证。 要求2:参考“参考内容2”中给出的将8421BCD码转换成0-9的七段码译码器源程序,编写一个将二进制码转换成0-E的七段码译码器。1)用QuartusII波形仿真验证;2)下载到DE0开发板,利用开发板上的数码管验证。 要求3:参考“参考内容3”中给出的四位二进制计数器的源程序,编写一个计数器实现0-E计数。用QuartusII波形仿真验证; 要求4:参考“参考内容4”中给出的50M分频器的源程序,编写一个能实现占空比50%的5M和50M分频器即两个输出,输出信号频率分别为10Hz和1Hz。下载到DE0开发板验证。(提示:利用DE0板上已有的50M晶振作为输入信号,通过开发板上两个的LED灯观察输出信号)。电路框图如下:

要求5:利用已经实现的VHDL模块文件,顶层文件采用原理图设计方法,实现0-E计数自动循环显示,频率1Hz和10Hz可以切换。(提示:如何将VHDL模块文件在顶层原理图文件中引用,参考参考内容5) 三、实验设备 (1)电脑一台; (2)数字电路实验箱; (3)数据线一根。 四、实验原理 1.VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。 2.VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。 3.VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。 4.VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。

硬件描述语言与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硬件描述语言实验报告

硬件描述语言实验附录 姓名:xxx 学号:xxx 指导教师:xxx 目录 硬件描述语言实验附录 (1) 实验1.三输入与门电路实验 (2) 实验2. 三—八译码器实验 (3) 实验3. D触发器实验 (4) 实验4. 分频器实验 (5) 实验5. 状态机实验 (8)

实验1.三输入与门电路实验 --三输入与门电路threeinput --姓名:王定 --学号:1306034248 --中北大学 LIBRARY IEEE; --调用库 USE IEEE.STD_LOGIC_1164.ALL;--库文件 -------------------------------------------------------------- ENTITY threeinput IS --定义实体名,其名称必须与VHDL文本文件名称相同PORT( A: IN STD_LOGIC; --输入端口,时钟输入 B: IN STD_LOGIC; --输入端口,个位写入使能 C: IN STD_LOGIC; --输入端口,十位写入使能 CO: OUT STD_LOGIC); --输出端口,溢出标志 END ENTITY threeinput; --结束端口定义 -------------------------------------------------------------- ARCHITECTURE RTL OF threeinput IS--定义结构体 BEGIN PROCESS(A,B,C) IS --开始,必须带上 BEGIN CO<=A AND B AND C ; END PROCESS; END ARCHITECTURE RTL; --结束结构体 表1. 三输入与门电路VHDL实验代码 图1. 三输入与门电路仿真波形图,A,B,C输入,CO输出

硬件描述语言实验报告

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

实验一简单组合逻辑设计 一、实验目的及要求: 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-HDL上机大作业(硬件描述语言)-微电子学院

《Verilog HDL 数字集成电路设计原理与应用》上机作业 班级 学号 姓名 题目1:数字集成电路的verilog HDL 描述与仿真 要求: (1) 学习使用Modelsim 设计和仿真软件; (2) 练习教材7.2.1中的例子; (3) 掌握设计代码和测试代码的编写; (4) 掌握测试仿真流程; 解答: 题目2:简述begin-end 语句块和fork-join 语句块的区别,并写出下面信号 对应的程序代码 ******* ******* ******* -J /l :i -3fcEncli_dnillr?gli. -* iai "12] 丄11] J 代刪ten 由」可Itr 手 rlntberidi_d-rillregii.. min * 11] &:o * 12] &:o 51Q SHO I _ i_r JTI_ -Un JTLJ 1J1D nnn 口 □ 口 n n r, i nr n_r H I ooa !j 6ic rLTLTLn 一1厂厂厂 o ■* AeEtbsndh^E^iftr^E * Afr3tben[iT_sniHTejs._ a As3tbehi±]_g*iHTeg3._ J AestbenctLF ilb egk … .noF 览 EQZBl n. EM

解答: (1)begin-end语句块和fork-join 语句块的区别: 1、执行顺序:begin-end语句块按照语句顺序执行,fork-join 语句块所有语句均在同一时刻执行; 2、语句前面延迟时间的意义:beg in-e nd语句块为相对于前一条语句执行结束的时间,fork-joi n 语句块为相对于并行语句块启动的时间; 3、起始时间:begin-end语句块为首句开始执行的时间,fork-join 语句块为转入并行语句块的时间; 4、结束时间:begin-end语句块为最后一条语句执行结束的时间,forkjoin 语句块为执行时间最长的那条语句执行结束的时间; 5、行为描述的意义:begin-end语句块为电路中的数据在时钟及控制信号 的作用下,沿数据通道中各级寄存器之间的传送过程。fork-join 语句块为电 路上电后,各电路模块同时开始工作的过程。 (2)程序代码: Beg in-end 语句: module in itial_tb1 ; reg A,B; in itial beg in A=0;B=1; #10 A=1;B=0; #10 B=1; #10 A=0; #10 B=0; #10 A=1;B=1; end en dmodule Frk-joi n 语句: module wave_tb2; reg A,B; parameter T=10; in itial 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; joi n en dmodule 题目3.分别用阻塞和非阻塞赋值语句描述如下图所示移位寄存器的电路图 outO outl out2

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;

阎石《数字电子技术基础》(第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";

ALU实验报告

算术逻辑部件ALU实验报告 一、实验目的 (1)熟悉硬件描述语言及开发环境,了解硬件系统开发的基本过程。 (2)掌握ALU基本设计方法和简单运算器的数据传送通路。 (3)验证ALU的功能。 二、实验环境 (1)硬件环境:安装有Windows 7 或以上操作系统的PC,THINPAD教学计算机。(2)软件开发:FPGA开发工具软件Xilinx ISE 12.3或以上。 三、实验内容 (1)根据实验原理中的要求,用VHDL语言实现一个简单的ALU。 (2)在教学计算机THINPAD上验证实现的ALU的功能。 四、实验原理 算术逻辑部件ALU的主要功能是对二进制数据进行定点算术运算、逻辑运算和各种移位操作等。算术运算包括定点加减乘除运算,逻辑运算主要用逻辑与、逻辑或、逻辑异或和逻辑非等操作。ALU通常有两个数据输入端A和B输出操作数,一个数据输出端Y以及标志位输出结果,通过输入操作码op来确定所要进行的操作,本实验通过实现一个状态机,根据状态机状态的变化来输人操作数及操作码,并最终实现不同的运算,将结果和标志位呈现出来。 本实验中的ALU要求实现基本的算术运算、逻辑运算、移位运算等,具体功 五、实验步骤 本实验通过VHDL语言实现一个比较简单的ALU模块。 (1)用VHDL语言编写ALU功能代码,并用状态机对其进行控制,使其完成实验要求的操作。操作码和操作数的输入用微型开关SW0~SW15,计算结果的输出用数字机上的LED灯来展示。 (2)将代码下载到教学机的FPGA中,并调试完成。 (3)在THINPAD教学机上运行时,RST和时钟均用手动开关或按钮,便于演示。操作码和操作数在开关SW0~SW15上输入,为便于观察和调试,每次ALU得到操作数,最好可以在LED上显示一下,最后的运算结果在L0~L15上显示,标志位

硬件描述语言及电路仿真

上海建桥学院本科课程教学大纲 【硬件设计语言及电路仿真】 【HDL Hardware Description Language and circuit simulation】 一、基本信息 课程代码:【b0822101】 课程学分:【3学分】 面向专业:【微电子学专业】 课程性质:【基础必修课】 开课院系:电子系 使用教材:主教材【《Verilog HDL 与数字系统设计简明教程》吴弋编人民邮电出版社 2009】辅助教材【《数字系统设计与Verilog HDL》(第二版) 王金明编电子工业出版社2005】 参考教材【《Verilog数字系统设计教程》夏宇闻编北京航天航空大学出版社2008】先修课程:【数字逻辑电路 b08214021(4)】 二、课程简介 本课程是微电子、电子、通信专业的一门重要的专业课,是学生学习专业课和从事本专业的科研、生产工作的重要基础。该门课程主要分为两大部分:第一部分主要使学生初步了解EDA技术的现状与发展,以及EDA技术自顶向下的设计方法,要求学生可熟练应用EDA工具平台(QuarutsII、Modelsim等开发软件)对可编程芯片(FPGA或CPLD)进行电路或系统的设计、仿真、下载与调试。第二部分基于硬件描述语言进行数字电路系统的设计与仿真则是该门课程的核心内容。这部分重点介绍目前比较流行的硬件描述语言——Verilog HDL语言,以及它的基本语法、基本结构、建模方法、模块调用以及模块测试等。并且给出不少目前较为常用的数字电路模块的编程实例,如加法器、编码器、译码器、数据选择器等组合逻辑电路,触发器、锁存器、计数器、移位寄存器等时序逻辑电路,以及Mealy状态机、Moore状态机等等。通过本课程的学习,使学生能够比较熟练地使用QuartusII等常用EDA软件对可编程芯片进行一些简单电路系统的设计,如交通灯控制电路,LED点阵显示,自动售货机控制电路,音乐播放器等。三、选课建议 FPGA设计是数字集成电路设计的重要组成部分和实践环节,属于应用部分,是数字集成电路设计的后续课程,应安排在数字电路课程之后。 四、课程基本要求 了解可编程逻辑器件的基本知识,EDA发展历程及EDA设计流程,以及常用的EDA工具。熟悉硬件描述语言的基本结构、建模方式、常用电路模块的设计实例。重点掌握借助于EDA开发工具用硬件描述语言设计可编程芯片电路系统的方法。 五、课程内容 第一部分 EDA技术概述 教学目的及要求:

硬件描述语言课程教学大纲(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)知识点三:运算符及表达式

CPU设计实验报告

武汉大学计算机学院计算机科学与技术专业 CPU设计实验报告 实验名称:开放式实验CPU设计课题名称: 计算机组成原理 班级: 计科2班 指导教师:徐爱萍 组长: 组员: 二零一五年三月

目录 目录 (2) 1 实验环境(张航宇) (4) 1.1 Quartus Ⅱ介绍 (4) 1.2 硬件描述语言(VHDL) (4) 1.3实验的主要成果 (4) 2 实验要求(彭阳坤) (5) 2. 1 指令格式要求 (5) 2. 2 指令流程及微信号序列分析 (5) 2.2.1 ADD指令分析 (5) 2.2.2 ADC指令分析 (5) 2.2.3 SUB指令分析 (6) 2.2.4 SBC指令分析 (6) 2.2.5 INC指令分析 (6) 2.2.6 DEC指令分析 (6) 2.2.7 SHL指令分析 (7) 2.2.8 SHR指令分析 (7) 2.2.9 MOVR指令分析 (7) 2.2.11 MOVD指令分析 (7) 2.2.12 LDRR指令分析 (8) 2.2.13 STRR指令分析 (8) 2.2.14 JMP指令分析 (8) 2.2.15 JRZ指令分析 (8) 2.2.16 JRC指令分析 (9) 3.部件仿真实验(彭阳坤) (10) 3.1 八个通用寄存器设计与仿真 (10) 3.1.1 设计代码 (10) 3.1.2 RTL连接图 (16) 3.1.3 仿真过程 (16) 3.2算术逻辑单元设计与仿真 (17) 3.2.1 设计代码 (17)

3.2.2 RTL连接图 (22) 3.2.3 仿真过程 (23) 4. CPU设计(彭阳坤) (24) 4.1取指设计 (24) 4.2 时序节拍设计 (25) 4.3指令译码的设计 (26) 4.4执行部分设计 (29) 4.5存储器部分设计 (31) 4.6通用寄存器组设计 (32) 4.7寄存器输出设计 (38) 4.8顶层实体设计 (38) 5. 测试报告(张航宇) (42) 5.1规则文件 (42) 5.2测试文件 (42) 5.3指令测试 (44) 6 实验总结 (46) 6.1 彭阳坤的小结 (46) 6.1.1 实验收获 (46) 6.1.2 建议与意见 (46) 6.2张航宇的小结 (46) 6.2.1 实验收获 (46) 6.2.2 建议与意见 (47) 参考资料 (47)

硬件描述语言实验报告五

实验五 有限状态机 一、实验目的 本次实验通过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

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