2017春电赛FPGA基本任务一实验报告

时间:2022-11-22 00:50:08
  • ——设备:PC机 QuartusII软件开发平台(9.1sp2版本)
  • ——存在problem:RTL电路不太会绘制…TAT

计数器仿真实验 1 内容

  • 使用Veriog - HDL 语言按照如下要求设计一个计数器电路并进行仿真测试

信号定义

信号名称 方向 位宽 说明
clk 输入 1 输入时钟信号
RST 输入 1 输入复位清零信号,异步高电平有效
CNT 输出 3 输出计数值信号

计数器特征

从0计数到5,然后又变成0,如此往复

0 1 2 … 5 0 1 2 … 5 0 1 2 … 5

同步时钟电路仿真实现过程

1. 分析题目要求及数据

 计数器是时序电路中常用的原件之一,主要用来实现计数或者定时功能。根据题目要求,这里我们设计的是一个计数初值为0的同步6进制计数器,其中信号位宽即表示数据所用的比特数。根据EDA课程学到的内容,首先对计数器有一个大致的模型,如下图所示:

2017春电赛FPGA基本任务一实验报告
自行设计电路思路方法全部来自数字电路课程的知识
对时序电路部分的一些重点知识作截图整理如下
2017春电赛FPGA基本任务一实验报告

2. 模6计数器电路的状态转移图以及电路设计过程:

2017春电赛FPGA基本任务一实验报告

3. Quartus II软件实现电路设计:

2017春电赛FPGA基本任务一实验报告
2017春电赛FPGA基本任务一实验报告
波形仿真结果验证电路设计基本正确。

4. Verilog HDL代码如下:

////////// 模6 计数器 ////////////////
module top(clk,//input 1,同步时钟信号
RST,//input 2,复位信号
CNT);//output,输出计数信号
input clk,RST;
output[2:0] CNT;
reg[2:0] CNT;
always@(posedge clk or posedge RST) begin
if(RST) begin
CNT<=0;
end
else begin
if(CNT<5)begin
CNT<=CNT+1;
end
else begin
CNT<=0;
end
end
end
endmodule

tips:

  • 本实验使用MAX7000S系列的EPM7032SLC44-6芯片实现,引脚分配由编译系统自动分配。
  • 由QuartusII 软件扫描生成RTL电路图并查看的步骤如下:
    • 输入代码,选择Processing > start > Analysis & Elaboration
    • Tools > Netlist viewer > RTL viewer

5. 查看RTL电路图

2017春电赛FPGA基本任务一实验报告

计数器仿真实验 2 内容

  • 使用Veriog - HDL 语言按照如下要求设计一个计数器电路并进行仿真测试

信号定义

信号名称 方向 位宽 说明
clk 输入 1 输入时钟信号
RST 输入 1 输入复位清零信号,异步高电平有效
CNT 输出 4 输出计数值信号

计数器特征

设计一个计数器,该计数器在电路上电后会循环的从0值递增计数到最大值M,计数最大值M是一个循环变化的过程,计数器复位之后,第一次计数最大值M是6,然后是7、8、9,然后计数最大值M又变成6,如此往复循环,计数过程如下所示:

0 1 2 … 6 0 1 2 … 7 0 1 2 … 8 0 1 2…9 0 1 2…6

分析题目要求分析电路完成代码实现仿真

1.计数器电路的状态转移图如下所示:

2017春电赛FPGA基本任务一实验报告
对题目一代码稍作改动进行仿真验证

2.Verilog HDL代码:

module count3(RST, CLK, CNT);   //计数值输出 
input RST;//
复位信号
input CLK;
//同步时钟信号
output [3:0] CNT;
//计数值输出
parameter MIN=6; //计数最小模值为6
parameter MAX=9; //计数最大模值为9

reg [3:0] CNT;
reg [3:0] CNT_max=MIN;//reg变量初始化为MIN计数最小值

always @ (posedge CLK or posedge RST)begin
if(RST)begin
CNT <= 0;
//信号复位
CNT_max <= MIN;
//计数模值复位
end
else begin
if(CNT < CNT_max)begin
CNT <= CNT + 1'b1;
//计数累加1
end
else if(CNT == CNT_max)begin
CNT <= 0;
//归零重新开始计数
if(CNT_max < MAX)
CNT_max <= CNT_max + 1'b1;
//计数模值加1
else
CNT_max <= MIN;
end
end
end

endmodule

####3.仿真结果如下:

2017春电赛FPGA基本任务一实验报告

4.查看RTL电路图

2017春电赛FPGA基本任务一实验报告