gpt4 book ai didi

vhdl - 将 VHDL 逻辑向量转换为用户定义的字符串以进行仿真

转载 作者:行者123 更新时间:2023-12-04 18:29:39 25 4
gpt4 key购买 nike

我正在使用 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;

这实际上效果很好,并且可能足以满足我想做的大多数事情:

enter image description here

不过,主要问题是我被字符串常量困住了,所以对于像 mov acc,x 这样更复杂的东西来说太不切实际了。以及真实世界设计将具有的所有其他变体。

有没有办法构造这样的动态模拟标识符?还是 HDL 的基本限制?

最佳答案

在 Modelsim 中,您可以使用虚拟类型和函数。例如,考虑以下向量:

signal opcode : std_logic_vector(2 downto 0);

然后您可以在 Modelsim 命令行定义一个虚拟类型,例如:
virtual type {{0 nop} {1 load} {2 store} {3 invalid}} opcode_type

这是一种只有模拟器才知道的类型。然后可以根据这种类型创建一个虚拟信号来转换向量,例如:
virtual function {(opcode_type)opcode} opcode_str

然后挥手 opcode_str ,它会给你一个自定义格式的字符串..

我不知道你是否可以用 Active-HDL 做同样的事情。

现在,对于动态执行,唯一的可能性可能是返回的字符串是否由 TCL 函数定义,例如:
# TCL code to read a file, or otherwise dynamically generate opcodes
# returning the appropriately formatted virtual type
proc generate_opcode_type {} {
...
}

virtual type [generate_opcode_type] opcode_type
virtual function {(opcode_type)opcode} opcode_str

然后挥手 opcode_str .

关于vhdl - 将 VHDL 逻辑向量转换为用户定义的字符串以进行仿真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49081146/

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