gpt4 book ai didi

VHDL:十进制整数的第n位

转载 作者:行者123 更新时间:2023-12-04 22:05:54 25 4
gpt4 key购买 nike

我有一个整数信号(范围从 0 到 9999)。我试图在一组 7 段显示器上显示它。我已经实现了多路复用器(一次显示一个数字)。现在我需要将我的整数拆分成个位数。

理论上它非常简单:只需使用 mod(例如 NUM/100 mod 10 给出第二个数字)。问题是,当我用 mod 编译解决方案(使用 4 次)时,我的代码仅用于 mod 就使用了 9000 多个单元格。这太多了(但有效)。

然后我尝试转换为更小的整数,但它不起作用。 0 到 9 的整数范围使用 4 位,所以它实际上是 0 到 15 的范围。

我确信有更简单的明显解决方案,但我找不到它。请注意,我是初学者 :)。

编辑:代码:

这部分设置正确的输出以显示给定的数字

<p></p>

<pre><code>process (clk)
begin
if rising_edge(clk) then
case number1 is
-- od prawej: a b c d e f g
when 0 => segment <="1000000"; -- '0'
when 1 => segment <="1111001"; -- '1'
when 2 => segment <="0100100"; -- '2'
when 3 => segment <="0110000"; -- '3'
when 4 => segment <="0011001"; -- '4'
when 5 => segment <="0010010"; -- '5'
when 6 => segment <="0000010"; -- '6'
when 7 => segment <="1111000"; -- '7'
when 8 => segment <="0000000"; -- '8'
when 9 => segment <="0010000"; -- '9'
when others=> segment <="1111111";
end case;
end if;
end process;
</code></pre>

<p></p>

这部分选择显示(4 个中的 1 个)并设置数字值

process (clk)
variable count: integer range 0 to 1000;
begin
if rising_edge(clk) then
if count = 1000 - 1 then
count := 0;
case digit is
when "1000" => digit <="0001"; number1 <= year/1000 mod 10;
when "0001" => digit <="0010"; number1 <= year/100 mod 10;
when "0010" => digit <="0100"; number1 <= year/10 mod 10;
when "0100" => digit <="1000"; number1 <= year mod 10;
when others => digit <="0001";
end case;
else
count := count + 1;
end if;

end if;
end process;

最佳答案

一般来说,当一个数字需要以十进制形式表示时,该数字的编码选择是二进制编码十进制(BCD),其中以 10 为底的数字的每个数字都使用 4 位二进制编码。

当然,这意味着您不能将整个数字视为一个二进制整数,因为每个 4 位数字的有效范围仅为 0-9(A-F 是非法的)。因此,十进制值 12 将被编码为“0001 0010”。

不是简单地添加两个 VHDL 无符号值(或 std_logic_vectors),您对数字进行的任何操作(通常是加法和减法)都必须使用为 BCD 定制的逻辑。有大量带有示例的在线资源(例如,搜索 BCD 加法器),因此我不会在这里详细介绍。

关于VHDL:十进制整数的第n位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com