我正在使用 active-hdl 来模拟我的 FPGA 设计,我想知道是否可以使用动态生成的字符串来表示我在模拟器中的信号。例如,假设我有一个包含操作码的 4 位 std_logic_vector,我希望模拟器显示操作码字符串“nop”、“add”、“sub”等,而不是向量值。
起初我尝试声明自定义枚举类型,但很快发现您无法选择单个元素的值。我的下一个解决方案是仅将枚举用于模拟显示并使用翻译函数进行转换:
type op_code_type is (nop, add, sub, unknown); -- not in order
signal op_code_str: op_code_type;
signal op_code: std_logic_vector(3 downto 0);
function to_string(op_code : std_logic_vector(3 downto 0))
return op_code_type is
begin
case op_code is
when "0000" => return nop;
when "0010" => return add;
when "0011" => return sub;
when others => return unknown;
end case;
end to_string;
begin
----- testbench -----
process
begin
op_code <= "0000";
wait for 1ns;
op_code <= "0001";
wait for 1ns;
op_code <= "0010";
wait for 1ns;
op_code <= "0011";
wait for 1ns;
end process;
op_code_str <= to_string(op_code);
end architecture;
这实际上效果很好,并且对于我想做的大多数事情来说可能已经足够了:
但主要问题是我被字符串常量困住了,所以对于更复杂的东西mov acc,x
以及现实世界设计中的所有其他变体来说,这太不切实际了。
有没有办法像这样构造动态模拟标识符?还是它是 HDL 的基本限制?