【发布时间】:2014-01-01 08:07:15
【问题描述】:
我对一个项目的 VHDL 有一个大问题。我想在 7 段显示上看到用户用开关设置的数字。例如,如果低位 5 个开关打开,那么它们将代表二进制数“11111”,即十进制的 31。所以我想在 7 段显示器上看到 31。
为此,我计划了以下步骤:
- 将开关的5值插入数组
- 将数组转换为整数
- 将整数看成7段显示
第 1 点)插入数组
signal first: std_logic_vector (0 to 4);
signal temp: integer range 0 to 9999:=0;
for i in 0 to 4 loop
first(i)<=SW(i);
end loop;
temp<=VEC_TOINT(first);
HEX0<=INT_TO7SEG(temp);
第 2 点)向量到整数
Function VEC_TOINT(Vector: in std_logic_vector) return integer is
variable temp: bit_vector(Vector'range);
variable result: integer :=0;
Begin
for index in Vector'range loop
result:=result * 2 + bit'pos(temp(index));
end loop;
if Vector(Vector'left) = '1' then
result:=(-result)-1;
end if;
return result;
End VEC_TOINT;
关于第三点,目前我不知道。
【问题讨论】:
-
如果你真的不知道第三部分,那么你应该考虑另一条职业道路。另一方面,如果您确实有一些想法,那么您应该告诉我们您对该问题的理解。因为你只是要求我们为你做功课。
-
您的 7 段显示器要么具有内置编码器,要么更可能接受每个字符 7 位,每个位代表一个段。显示器应该附带一些文档(或者可能在连接器上编号),指示哪个位对应于哪个段。如果它们从上到下按左右行编号,则 1,2,4,6,7 将是字符“5”,而 1,3,6 将是字符“7”。 (画出来。)一个简单的 10 字节转换表会将数字转换为它们的段编码。
-
数字 A-F 有点棘手。 A、C、E、F 很简单,B 通常呈现为“b”,D 通常呈现为“d”。