7段多路复用器未显示所需数字。-Verilog

7段多路复用器未显示所需数字。-Verilog,verilog,fpga,mux,Verilog,Fpga,Mux,我想在7段显示器上显示0.0到99.5之间的数字,步骤0.5。 我有3个七段显示器可用,它们连接在一个多路复用器中,所以我有7个管脚用于段和3个管脚 选择用于选择数字的管脚。 在所附的Verilog代码中,我显示了特定的数字,问题是我不知道如何显示 一个循环,将为特定数字设置选择引脚。 有人能帮我轻松做到这一点吗? 当前代码仅显示零。 我注意到select引脚设置,select寄存器移位,但数字不变。 它总是按照我希望显示的顺序显示最后一位数字 module LED_7seg( inpu

我想在7段显示器上显示0.0到99.5之间的数字,步骤0.5。 我有3个七段显示器可用,它们连接在一个多路复用器中,所以我有7个管脚用于段和3个管脚 选择用于选择数字的管脚。 在所附的Verilog代码中,我显示了特定的数字,问题是我不知道如何显示 一个循环,将为特定数字设置选择引脚。 有人能帮我轻松做到这一点吗? 当前代码仅显示零。 我注意到select引脚设置,select寄存器移位,但数字不变。 它总是按照我希望显示的顺序显示最后一位数字

module LED_7seg(
    input clk,
    output segA, segB, segC, segD, segE, segF, segG, segDP,
    output dig0, dig1, dig2

);

// cnt is used as a prescaler  - fbrd / prescaler
reg [23:0] cnt;
always @(posedge clk) cnt <= cnt+24'h1;
wire cntovf = &cnt;

// BCD is a counter that counts from 0 to 9
reg [3 : 0] BCD;
wire [15 : 0] BCD16;

// set of number
assign BCD16 = 'h350;



reg [2 : 0] Digit;
always @(posedge clk)
begin
       if(Digit == 3'h4) begin
          Digit <= 3'h1;
       end else begin
          Digit <= Digit + 3'h2;
       end
       case(Digit)
       3'h1:         BCD = BCD16[3 : 0];
       3'h2:         BCD = BCD16[7 : 4];
       3'h4:         BCD = BCD16[11 : 8];
       default:   BCD = BCD16[3 : 0];
       endcase
end


reg [7:0] SevenSeg;
always @(*)
case(BCD)
    4'h0: SevenSeg = 8'b11111100;
    4'h1: SevenSeg = 8'b01100000;
    4'h2: SevenSeg = 8'b11011010;
    4'h3: SevenSeg = 8'b11110010;
    4'h4: SevenSeg = 8'b01100110;
    4'h5: SevenSeg = 8'b10110110;
    4'h6: SevenSeg = 8'b10111110;
    4'h7: SevenSeg = 8'b11100000;
    4'h8: SevenSeg = 8'b11111110;
    4'h9: SevenSeg = 8'b11110110;
    default: SevenSeg = 8'b00000000;
endcase

assign {dig0, dig1, dig2} = Digit;
assign {segA, segB, segC, segD, segE, segF, segG, segDP} = ~SevenSeg;


endmodule
模块LED_7seg(
输入时钟,
输出segA、segB、segC、segD、segE、segF、segG、segDP、,
输出dig0,dig1,dig2
);
//cnt用作预分频器-fbrd/预分频器
reg[23:0]cnt;

总是@(posedge clk)cnt我对所选数字的模式有问题,并且数字之间的切换太快。这是一个corecct代码:

   /* Author: Grega Mocnik
    Description: 7 segment driver for 3 digits display.
    Date: 3.3.2017
    Version: V1
    *****************************************************
*/
module LED_7seg(
    input clk,
    output segA, segB, segC, segD, segE, segF, segG, segDP,
    output dig0, dig1, dig2
);
// Prescaler of board frequency
// For normall view on 7 segment displey must be switch frequency betwen
// segments more than 100 Hz. - At 100Hz, a display cycle would last 10ms
// (and each display would be lit 3.33ms per cycle).
// cnt is used as a prescaler  -
// equation: frekvneca_zeljena = (fboard) / (2 * (1 + Presclaer))
reg [18:0] cnt;
always @(posedge clk) cnt <= cnt+19'h1;
wire cntovf = &cnt;

// Declare of BCD register, for select segment and digit's
reg [3 : 0] BCD;
wire [15 : 0] BCD16;

// Set of number - for number set this register first two numbers
// is before point. example: 'h351 = 35.1
assign BCD16 = 'h846;

// Declare of SevenSeg register - select segment
reg [7:0] SevenSeg;
// Declare of Digit register - select digit
reg [2 : 0] Digit;

// Switch between digits
// Switch pattern is 1 2 4 1 2 4 ...
// because, 1 in binary 001 and 2 in binary 010 and 4 in binary 100 ...
// have common anode and then select digit with 1 and select segment with 0.
always @(posedge clk)
begin
     if(cntovf) begin
       Digit <= Digit * 3'h2;
       if(Digit > 3'h4)  begin Digit <= 3'h1;end
       if(Digit == 3'h0) begin Digit <= 3'h1;end
     end
end
// Select each number from BCD16 reg.
// All number to 10 we can show with 4 bit's in binry world.
// Now we can see for example number 351 binary pattern 0011 0101 0001 -
// - first 4 bit's for first digit in number
// - second 4 bit's for second digit in number
// - third 4 bit's for third digit in number
always @(*)
       case(Digit)
       3'h1:      BCD = BCD16[3 : 0];
       3'h2:      BCD = BCD16[7 : 4];
       3'h4:      BCD = BCD16[11 : 8];
       default:   BCD = BCD16[3 : 0];
       endcase

assign {dig0, dig1, dig2} = Digit;

// Explain pattern is write for common cathode.
// The last bit is for dot segment.
always @(*)
case(BCD)
    4'h0: SevenSeg = 8'b11111101;
    4'h1: SevenSeg = 8'b01100001;
    4'h2: SevenSeg = 8'b11011011;
    4'h3: SevenSeg = 8'b11110011;
    4'h4: SevenSeg = 8'b01100111;
    4'h5: SevenSeg = 8'b10110111;
    4'h6: SevenSeg = 8'b10111111;
    4'h7: SevenSeg = 8'b11100001;
    4'h8: SevenSeg = 8'b11111111;
    4'h9: SevenSeg = 8'b11110111;
    //default: SevenSeg = 8'b00000000;
endcase

// Assign output segment, - output is invert because we have common anonde display
// segment binary pattern is write for common cathode display
assign {segA, segB, segC, segD, segE, segF, segG, segDP} = ~SevenSeg;

endmodule 
/*作者:Grega Mocnik
描述:用于3位数字显示的7段驱动程序。
日期:2017年3月3日
版本:V1
*****************************************************
*/
模块LED_7seg(
输入时钟,
输出segA、segB、segC、segD、segE、segF、segG、segDP、,
输出dig0,dig1,dig2
);
//板频预分频器
//对于7段显示器上的正常视图,其开关频率必须介于
//超过100 Hz的段在100赫兹时,显示周期将持续10毫秒
//(每个显示器每周期点亮3.33毫秒)。
//cnt用作预分频器-
//方程式:Frekvenca_zeljena=(fboard)/(2*(1+预滤器))
reg[18:0]cnt;

始终@(posedge clk)cnt查看
数字的模式
:0,2,4,1,3,5,1,3,5,5,1,3,5,。。。所需图案为1,2,4,1,2,4,1,2,4,。。。如何才能做到这一点?提示:无需添加,只需一行代码即可完成。