《数字逻辑电路》实验五 时序逻辑电路设计(二)
目录
源代码3:topdigit_204.v, hexseg8_204.v
一、实验目的
学会设计计数器;学会控制 1 位 7 段数码管的显示; 8 位 7 段数码管的显示,巩固计数器的设计。
二、实验内容
(1)使用 Verilog HDL 实现一个 3 位的模8加1(或减 1 )计数器 triled,要求每 1 秒加一次(或减一次) 1 (利用 2.7.1节的分频器);(见2.7.3)
(2)使用 Verilog HDL 实现一个 1 位 7 段数码管的编码器 hexseg,可以在数码管上显示 1 位16 进制数,下载到板子上进行验证;信号对应如下:输入 hex[3]-hex[0]对应 SW[3]-SW[0], 表明输入的 4 位二进制数,输出 segs[6]-segs[0]分别对应数码管的 CA,CB,CC,CD,CE,CF,CG 段,输入 en 接 SW23, 输出 an 接板上数码管使能引脚 A0,an 始终等于 en 来控制第一个数 码管的显示和不显示。 请根据第一章中图 1-7 自行列出各个数字的 7 段数码管真值表,并 按照真值表设计 7 段数码管编码器。要注意,数码管哪一段量,该段对应的信号要为低电平(见2.8.1)
(3)使用 Verilog HDL 和上一题设计的 hexseg实现一个 8 位十六进制数显示的数码管显示控制模块 hexseg8,下载到板验证;要求能同时稳 定地显示各个位的数字,并能定义 8 位数码管哪些位要显示,哪些位不需要显示。该模块有 8 个 4 位的输入 hex0[3:0],hex1[3:0],hex2[3:0],hex3[3:0],hex4[3:0],hex5[3:0],hex6[3:0], hex7[3:0]分别输入 8 个 4 位二进制数,一个 8 位的输入 en[7:0]表明哪一位数码管需要显示(低 电平有效,比如只需要低 4 位显示,高 4 位不用,这 en=11110000B),1 个 7 位的输出数码 管段码的 segs[6:0]和一个 8 位的数码管使能端 an[7:0] (低电平有效),另外,因为需要一个计数器产生 2ms 一次的数码管切换触发信号,因此输入还需要有 clk 和 reset。(见2.8.2)
三、代码与截图
源代码1:triled_204.v
`timescale 1ns / 1ps
//
module triled_204(
input clk,//外部 100MHz 时钟信号
input rst,//清 0 信号
output reg [2:0] c1,//模 8 计数器
output [2:0] c2// ~C1
);
wire clk1hz; //降频后的 1 秒时钟信号
assign c2 = ~c1;
// 实例化降频器
clock_div_204 U(.clk(clk),.reset(reset),.clkout(clk1hz));
always @(posedge clk1hz or posedge rst)
//仿真时改为always @(posedge clk or posedge rst)
begin
if (rst)
c1 <= 3'b000;
else begin
if (c1 == 3'b111)
c1 <= 3'b000;
else
c1 <= c1 + 1;
end
end
endmodule
测试代码1:triled_204_sim.v
`timescale 1ns / 1ps
//
module triled_204_sim();
reg clk;
reg rst;
wire [2:0] c1;
wire [2:0] c2;
triled_204 U(.clk(clk),.rst(rst),.c1(c1),.c2(c2));
//方便仿真源文件中改为always @(posedge clk or posedge rst)
always #5 clk = ~clk;
initial begin
clk = 0;
rst = 1;
#10 rst = 0;
#100 rst = 1;
#103 rst = 0;
#1000 $finish;
end
endmodule
引脚约束1:triled_204.xdc
set_property PACKAGE_PIN Y18 [get_ports clk]
set_property PACKAGE_PIN P20 [get_ports rst]
set_property PACKAGE_PIN D22 [get_ports {c1[2]}]
set_property PACKAGE_PIN E22 [get_ports {c1[1]}]
set_property PACKAGE_PIN A21 [get_ports {c1[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {c1[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {c1[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {c1[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {c2[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {c2[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {c2[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst]
set_property PACKAGE_PIN L15 [get_ports {c2[2]}]
set_property PACKAGE_PIN L14 [get_ports {c2[1]}]
set_property PACKAGE_PIN J17 [get_ports {c2[0]}]