实验二 异步清零和同步使能的4位计数器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西南科技大学

实验报告FPGA现代数字系统设计

实验题目:含异步清零和同步使能的4位加法计数器专业班级:

学生姓名:

学生学号:

实验时间:

指导教师:

实验二含异步清0和同步使能的4位加法计数器

一、实验目的:

学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL技术。

二、原理说明:

图2.1是一含计数使能、异步复位和计数值并行预置功能4位加法计数器,例2.1是其VHDL描述。由图2-1所示,

4位锁存器;

rst是异步清0信号,高电平有效;

clk是锁存信号;

D[3..0]是4位数据输入端。

ENA是使能信号,当ENA为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为'0'时将"0000"加载于锁存器。

图2-1含计数使能、异步复位和计数值并行预置功能4位加法计数器

三、实验内容:

1、在QuartusII上对例2-1进行编辑、编译、综合、适配、仿真。说明例中各语句

的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。

【例2-1】

module CNT4B(CLK,RST,ENA,CLK_1,RST_1,ENA_1,OUTY,COUT);//端口声明

input CLK,RST,ENA;

output CLK_1,RST_1,ENA_1;

output[3:0] OUTY;

output COUT;

reg[3:0] OUTY;

reg COUT;//寄存器变量OUTY,位宽为1

wire CLK_1;

wire RST_1;

wire ENA_1;

assign CLK_1 = CLK;

assign RST_1 = RST;

assign ENA_1 = ENA;

always@(posedge CLK or negedge RST) /*当CLK上升沿或者RST上升沿时,触发always模块执行*/

begin

if(!RST)

begin

OUTY<=4'b0000;

COUT<=1'b0;/*当复位信号等于0时,计数OUTY、COUT置0*/

end

else

if(ENA) /*当使能信号为1时,计数器计数工作*/

begin

OUTY<=OUTY+1;

COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3]; /*计数显示*/

end

end

endmodule

2保存计数器程序为CNT4B.vhd,进行功能仿真、全编译、时序仿真,如出现错误请按照错误提示进行修改,保证设计的正确性。

3锁定引脚

pin location DE2上的名称

ENA PIN_N25SW[0]

CLK PIN_G26KEY0

RST PIN_N23KEY1

OUTY[0]PIN_AC21LEDR[7]

OUTY[1]PIN_AA14LEDR[8]

OUTY[2]PIN_Y13LEDR[9]

OUTY[3]PIN_AA13LEDR[10]

COUT PIN_Y12LEDG[8]

CLK_1PIN_AE22LEDG[0]

RST_1PIN_AF22LEDG[1]

ENA_1PIN_AE23LEDR[0]

4下载

采用JATG方式进行下载,通过ENA,CLK,RST输入,观察的LEDR[0],LEDR[7],LEDR[8],LEDR[9],LEDR[10],LEDG[0],LEDG[1],LEDG[8]亮灭验证计数器的

逻辑功能。

5使用SIGNALTAP II对CNT4B计数器中的COUT, OUTY进行实时测试。

四、实验结果与分析

功能仿真:

时序编译:

时序仿真:

下载情况:

最终结果:

五、思考题

1、改写例2-1,用两个always语句实现模块功能?

答:module CNT4B(CLK,RST,ENA,CLK_1,RST_1,ENA_1,OUTY,COUT);

input CLK,RST,ENA;

output CLK_1,RST_1,ENA_1;

output[3:0] OUTY;

output COUT;

reg[3:0] OUTY;

reg COUT;

wire CLK_1;

wire RST_1;

wire ENA_1;

assign CLK_1 = CLK;

assign RST_1 = RST;

assign ENA_1 = ENA;

always@(posedge CLK or negedge RST)

begin

if(!RST)

begin

OUTY<=4'b0000;

COUT<=1'b0;

end

else

OUTY= OUTY+1;

always@(OUTY)

if(ENA)

begin

OUTY<=OUTY+2’b1;

COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3];

end

end

assign COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3];

endmodule

相关文档
最新文档