计数器 FPGA 电路实验 作业
2017-02-18 21:41
399 查看
实验一
1.设计功能描述
在 DE0 开发板上,设计一个变换计数最大值的循环计数器:在电路复位后会循环的从0值递增计数到最大值,第一次计数最大值是6,然后是7、8、9,然后计数最大值又变成6,如此往复循环; 计数数值以十进制数在最右侧的 HEX LED 数码管上显示,变化的时间间隔是1秒 ,复位时,数码管熄灭。
2.手工绘制的RTL图
3.Quartus Ⅱ9.0 编译生成的RTL电路图
(1)时间基准电路
(2)计数器模块
(3)数码管译码模块
4.程序源代码
5.Signal Tap 分析
实验内容二
1、设计要求
设计一个变换计数最大值的循环计数器在 DE0 开发板的从左到右的 4个HEX LED 数码管上,进行计数并用十进制数进行显示:左1 LED,显示 0、1、2 ~6 ,然后熄灭;左2 LED,显示 0、1、2 ~7 ,然后熄灭;左3 LED,显示 0、1、2 ~8 ,然后熄灭;最右侧 LED,显示 0、1、2 ~9 ,然后熄灭
然后再开始左1 LED, 显示 0、1、2~6 如此一直循环;所有情况下,计数数值变化的时间间隔是1秒,复位时,所有数码管熄灭,复位后,重新开始计数显示。
2.手工绘制RTL图
3.Quartus Ⅱ9.0 编译生成的RTL电路图
(1)时间基准电路
(2)循环计数模块
(3)计数值译码显示模块
4.程序源代码
5.Signal Tap 分析
6.视频链接
视频链接
1.设计功能描述
在 DE0 开发板上,设计一个变换计数最大值的循环计数器:在电路复位后会循环的从0值递增计数到最大值,第一次计数最大值是6,然后是7、8、9,然后计数最大值又变成6,如此往复循环; 计数数值以十进制数在最右侧的 HEX LED 数码管上显示,变化的时间间隔是1秒 ,复位时,数码管熄灭。
2.手工绘制的RTL图
3.Quartus Ⅱ9.0 编译生成的RTL电路图
(1)时间基准电路
(2)计数器模块
(3)数码管译码模块
4.程序源代码
///////////////时间基准电路///////////// module cnt_sync( CLK , CNTVAL, OV ); input CLK; output [32-1:0] CNTVAL; output OV; parameter MAX_VAL = 25_000_000; reg [32-1:0] CNTVAL; reg OV; always @ (posedge CLK) begin if(CNTVAL >= MAX_VAL) CNTVAL <= 0; else CNTVAL <= CNTVAL + 1'b1; end always @ (CNTVAL) begin if(CNTVAL == MAX_VAL) OV = 1'b1; else OV = 1'b0; end endmodule //////////////计数器模块///////////////// module counter( //对1s基本信号计数 EN, //计数使能控制 CLK, COU, RST); input RST, EN, CLK; output reg [3:0] COU; reg [1:0] M; reg [3:0] MAX = 4'b0110; always @ (posedge CLK) if (RST == 1) if (EN == 1) if (COU != MAX) begin COU <= COU + 1'b1; M <= M; end else begin COU <= 4'b0000; M <= M + 1'b1; end else COU <= COU; else //清零 begin M <= 2'b00; COU <= 4'b0000; end always @ (COU) case (M) //计数最值控制 2'b00 : MAX = 4'b0110; 2'b01 : MAX = 4'b0111; 2'b10 : MAX = 4'b1000; 2'b11 : MAX = 4'b1001; endcase endmodule ////////////////数码显示管译码///////////////////// module dec_4to8( IN , //计数值输入 RST , OUT); input [4-1:0] IN ; input RST ; output [8-1:0] OUT ; reg [8-1:0] OUT ; always @ (IN) begin if(RST) OUT = 8'b11111111; else case(IN) 4'b0000: OUT = 8'b11000000; 4'b0001: OUT = 8'b11111001; 4'b0010: OUT = 8'b10100100; 4'b0011: OUT = 8'b10110000; 4'b0100: OUT = 8'b10011001; 4'b0101: OUT = 8'b10010010; 4'b0110: OUT = 8'b10000010; 4'b0111: OUT = 8'b11111000; 4'b1000: OUT = 8'b10000000; 4'b1001: OUT = 8'b10010000; endcase end endmodule // module dec_4to8;
5.Signal Tap 分析
实验内容二
1、设计要求
设计一个变换计数最大值的循环计数器在 DE0 开发板的从左到右的 4个HEX LED 数码管上,进行计数并用十进制数进行显示:左1 LED,显示 0、1、2 ~6 ,然后熄灭;左2 LED,显示 0、1、2 ~7 ,然后熄灭;左3 LED,显示 0、1、2 ~8 ,然后熄灭;最右侧 LED,显示 0、1、2 ~9 ,然后熄灭
然后再开始左1 LED, 显示 0、1、2~6 如此一直循环;所有情况下,计数数值变化的时间间隔是1秒,复位时,所有数码管熄灭,复位后,重新开始计数显示。
2.手工绘制RTL图
3.Quartus Ⅱ9.0 编译生成的RTL电路图
(1)时间基准电路
(2)循环计数模块
(3)计数值译码显示模块
4.程序源代码
//////////////////////时间基准电路/////////////////////// module cnt_sync( CLK , // clock CNTVAL, // counter value OV ); // overflow input CLK; output [32-1:0] CNTVAL; output OV; parameter MAX_VAL = 50_000_000; reg [32-1:0] CNTVAL; reg OV; always @ (posedge CLK) begin if(CNTVAL >= MAX_VAL) CNTVAL <= 0; else CNTVAL <= CNTVAL + 1'b1; end always @ (CNTVAL) begin if(CNTVAL == MAX_VAL) OV = 1'b1; else OV = 1'b0; end endmodule ///////////////循环计数模块///////////////////////// module counter( //对1s信号计数 EN, RST, CLK, M, COU); input RST,EN, CLK; output reg [3:0] COU; output reg [1:0] M; reg [3:0] MAX = 4'b0110; always @ (posedge CLK) if (RST == 1) if (EN == 1) if (COU != MAX) begin COU <= COU + 1'b1; M <= M; end else begin COU <= 4'b0000; M <= M + 1'b1; end else COU <= COU; else begin COU <= 4'b0000; M <= 2'b00; end always @ (COU) case (M) 2'b00 : MAX = 4'b0110; 2'b01 : MAX = 4'b0111; 2'b10 : MAX = 4'b1000; 2'b11 : MAX = 4'b1001; endcase endmodule ///////////////////计数值译码显示模块/////////////////////// module dec_seg( //显示译码 M, COU_IN, SEG0, SEG1, SEG2, SEG3); input [1:0] M; input [3:0] COU_IN; output reg [7:0] SEG0; output reg [7:0] SEG1; output reg [7:0] SEG2; output reg [7:0] SEG3; reg [7:0] SEG_data [3:0]; always @ (COU_IN) case(COU_IN) //系统输出编码表 4'b0000 : SEG_data[M] = 8'b1100_0000; 4'b0001 : SEG_data[M] = 8'b1111_1001; 4'b0010 : SEG_data[M] = 8'b1010_0100; 4'b0011 : SEG_data[M] = 8'b1011_0000; 4'b0100 : SEG_data[M] = 8'b1001_1001; 4'b0101 : SEG_data[M] = 8'b1001_0010; 4'b0110 : SEG_data[M] = 8'b1000_0010; 4'b0111 : SEG_data[M] = 8'b1111_1000; 4'b1000 : SEG_data[M] = 8'b1000_0000; 4'b1001 : SEG_data[M] = 8'b1001_0000; 4'b1010 : SEG_data[M] = 8'b1000_1000; 4'b1011 : SEG_data[M] = 8'b1000_0011; 4'b1100 : SEG_data[M] = 8'b1100_0110; 4'b1101 : SEG_data[M] = 8'b1010_0001; 4'b1110 : SEG_data[M] = 8'b1000_0110; 4'b1111 : SEG_data[M] = 8'b1000_1110; endcase always @ (M) case (M) //根据当前的计数值COU选择显示的数码管,并关闭其他数码管 2'b00 : begin SEG0 = SEG_data[M];SEG3 = 8'b1111_1111; SEG1 = 8'b1111_1111; SEG2 = 8'b1111_1111; end 2'b01 : begin SEG1 = SEG_data[M];SEG0 = 8'b1111_1111; SEG2 = 8'b1111_1111; SEG3 = 8'b1111_1111; end 2'b10 : begin SEG2 = SEG_data[M];SEG1 = 8'b1111_1111; SEG0 = 8'b1111_1111; SEG3 = 8'b1111_1111; end 2'b11 : begin SEG3 = SEG_data[M];SEG0 = 8'b1111_1111; SEG1 = 8'b1111_1111; SEG2 = 8'b1111_1111; end endcase endmodule
5.Signal Tap 分析
6.视频链接
视频链接
相关文章推荐
- 计数器 FPGA 电路实验 作业
- 计数器 FPGA电路实验 作业2
- 计数器 FPGA 电路实验 作业
- 计数器 FPGA 电路实验 作业
- FPGA入门实验四:时间基准电路 和 带使能的多周期计数器
- FPGA实验4: 时间基准电路和带使能的多周期计数器
- FPGA基础实验:时间基准电路和带使能的多周期计数器
- FPGA实验六——计数器、ROM和DDS
- 【iCore3 双核心板_FPGA】例程六:计数器实验——计数器使用
- FPGA入门实验三:计数器、波形仿真、SignalTap
- FPGA实验三——计数器、波形仿真、SignalTap
- FPGA作业2:利用veilog设计循环进制计数器
- 作业:计数器仿真实验
- 【iCore1S 双核心板_FPGA】例程三:计数器实验——计数器的使用
- FPGA第一次作业——计数器
- FPGA实验3:计数器、波形仿真、SignalTap
- FPGA入门实验六:计数器、ROM和DDS
- FPGA作业1:利用74161设计20进制计数器
- FPGA设计时间基准电路和带使能的多周期计数器
- FPGA基础实验:用计数器读取ROM数据产生信号波形(直接数字频率合成DDS)