【问题标题】:Split up a four-digit number in verilog在verilog中拆分一个四位数
【发布时间】:2014-04-05 15:29:51
【问题描述】:

对于我的应用程序,我可以有一个从 0 到 9999 的数字,我需要将它放在 4 个七段显示器上。

我遇到的主要问题是将数字分成4位数字,我想到了几种方法:

  1. 每个数字都有多个 if 语句(冗长而不是最佳选择)
  2. 使用 if 语句来确定 10、100 等的数量(不那么冗长,但仍然有很多代码)

有没有更好的方法来做到这一点? (我很确定有)

【问题讨论】:

标签: verilog


【解决方案1】:

理想情况下,您可以将数字除以 10、100 和 1000(取结果和余数),这将告诉您数字中有多少个、十个、数百个和数千个。

但是,由于除法/取模在 verilog 中是一项昂贵的操作,您可能想尝试一种在面积/逻辑上更有效但在时间上效率较低的方法。

一个想法是,一次一个周期,用一些单独的计数器计算每列中有多少在你的数字中:

一些未经测试的伪代码:

input [13:0] mynumber;
input        start;
output       done;

reg   [13:0] counter;
reg   [3:0]  ones;
reg   [3:0]  tens;
reg   [3:0]  hundreds;
reg   [3:0]  thousands;
reg          done;

always @ posedge clk begin
    if(start) 
        counter <= 0;
    else if(counter == mynumber)
        done <= 1;
    else begin
        counter <= counter + 1;
        ones <= ones == 9 ? 0 : ones + 1;
        if(ones == 9) begin
            tens <= tens == 9 ? 0 : tens + 1;
            if(tens == 9) begin
                hundreds <= hundreds == 9 ? 0 : hundreds + 1;
                if(hundreds == 9) begin
                     thousands <= thousands + 1; 
                end
            end
        end
    end
end

【讨论】:

  • 计数是个好主意,但我担心的是我正在尝试运行 vga 显示器,但我不确定它能否跟上。
  • 我用了你的方法,但是没有用,只是在我的屏幕上产生了雾
猜你喜欢
  • 2023-03-05
  • 2012-12-06
  • 2011-12-20
  • 2017-07-11
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
相关资源
最近更新 更多