我仍在尝试习惯 VHDL 的一些怪癖,但我遇到了一些问题。首先,我知道像 rol、ror、ssl、srl 等移位运算符是不可合成的。本实验室的目的是使用黄金模型来检查测试台中同一事物的可综合版本。
现在,该程序的目的是将温度计代码转换为 3 位二进制数。因此,换句话说,温度计代码“00000001”=“001”、“00000011”=“010”、“00000111”=“011”等。我基本上是在尝试从右边数出字符串中 1 的数量向左。不会出现在 1 字符串之间放置“0”的情况,因此向量“00011101”是无效的并且永远不会出现。
我设计了一个不可综合(到目前为止,不可编译)的算法,我无法弄清楚如何开始工作。基本上,这个想法是读取温度计代码,将其右移并增加一个计数器,直到温度计代码等于 0,然后将计数器值分配给 3 位 std_logic_vector。下面是我到目前为止所做的代码。
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity therm2bin_g is
port(therm : inout std_logic_vector(6 downto 0); -- thermometer code
bin : out std_logic_vector(2 downto 0); -- binary code
i : integer range 0 to 7);
end therm2bin_g;
architecture behavioral_g of therm2bin_g is
begin
golden : process(therm)
begin
while(therm /= "00000000") loop
therm <= therm srl 1;
i = i + 1;
end loop;
bin <= std_logic'(to_unsigned(i,3));
end process golden;
behavioral_g;