㈠ 用verilog语言设计一个六位数码管动态显示从左到右为123456
下面是一个简单的 Verilog HDL 代码,可以实现六位数码管动态显示从左到右为123456的效果。
mole six_digit_display(clk, reset, digit_out);
// 输入信号
input clk; // 时钟信号
input reset; // 复位信号
// 输出信号
output [5:0] digit_out; // 数码管输出信号
// 内部信号
reg [26:0] counter; // 计数器
// 显示的数字
reg [5:0] digit [0:5] = {6'b000000, 6'b000001, 6'b000010, 6'b000011, 6'b000100, 6'b000101};
always @(posedge clk or negedge reset) begin
if (reset == 0) begin
counter <= 0;
digit_out <= 6'b000000;
end else begin
counter <= counter + 1;
digit_out <= digit[counter[25:20]];
end
end
endmole
在这个代码中,我们定义了一个名为 six_digit_display 的模块,该模块包含三个信号:clk、reset 和 digit_out。其中,clk 是闭皮时钟信号,reset 是复位信号,digit_out 是数码管液态拿输出信号。
在 six_digit_display 模块的 always 块中,我们闹搭使用了一个计数器 counter 来控制数码管显示的数字。每当时钟信号上升沿到来时,计数器就会自增1。然后,我们使用计数器的高6位(即 counter[25:20])来选择要显示的数字。具体地,我们使用一个名为 digit 的数组来存储要显示的数字,然后将 digit 数组中对应的数字输出到 digit_out 信号中。
在复位信号下降沿到来时,我们将计数器和数码管输出信号都重置为0,以确保数码管从最左边的数字开始显示。这样,当时钟信号不断变化时,数码管就会动态显示从左到右为 123456 的数字序列。
㈡ verilog在写长码长,特别长的复杂数字逻辑的时候怎么写
用systemverilog写的,相比于Verilog就多了个logic 变量,其它与Verilog一致。
顶层模块:
`timescale 1ns/1ps
//模块说明:7段数码管显示,一共有8个数码管
//共阳模式,低电平点亮,数码管采用3-8 译码器——74HC138芯片,
mole cnt_60
(
input logic CLK , //输入时钟,频率:
input logic RST_n , //复位端口,低电平复位
output logic [3:0] DSEL , //7段数码管【8--1】对应选择
output logic DEN , //数码管使能,高电平有效
output logic [7:0] led7_out //数据输出,最低位为小数点
);
logic [26:0] num; //待显示的数字
logic [2:0] dot; //待显示数字的小数点位置
always@(posedge CLK,negedge RST_n)
begin
if(!RST_n)
num <= 27'd0;
else
num = (num != 59)? (num + 27'd1) : num;
end
LED_7 U_LED_7
(
.CLK (CLK ), //输入时钟
.RST_n (RST_n ), //复位端口,低电平复位
.data_num (num ), //待显示的数据
.data_dot (dot ), //输入数据小数点位置
.DSEL (DSEL ), //7段数码管【8--1】对应选择
.DEN (DEN ), //数码管使能,高电平有效
.led7_out (led7_out ) //数据输出,最低位为小数点
);