我想组织一个工作总线功能模型并将常用程序(看起来像 CPU 子例程)推送到一个包中,并将它们从主 cpu 模型中取出,但我被卡住了。
这些程序在打包时无法访问硬件位。在 Verilog 中,我会将常用程序放入包含文件中,并根据给定测试套件的要求将它们链接到 CPU 模型中。
更多细节:
我有一个 CPU 的工作总线功能模型,用于模拟测试台架。在“用户界面”级别,我有一个名为“main”的进程在 CPU 模型中运行,它调用我预定义的“指令集”,如下所示:
cpu_read(address, read_result);
cpu_write(address, write_data);
等等
我将这些调用的组捆绑到更高级别的程序中,例如
configure_communication_bus;
clear_all_packet_counters;
等等
在下一层,这些通用函数调用一个更具体的硬件版本,该版本知道设计的接口时序,然后这些程序使用输入记录和输出记录连接到硬件模块端口并根据需要摆动 cpu 总线信号。
cpu_read 调用hardware_cpu_read(cpu_input_record, cpu_output_record, address)
;
像这样的东西:
procedure cpu_read (address : in std_logic_vector(15 downto 0);
read_result : out std_logic_vector(31 downto 0));
begin
hardware_cpu_read(cpu_input_record, cpu_output_record, address, read_result);
end procedure;
cpu_input_record
和cpu_output_record
在 cpu 模型 vhdl 文件中被声明为 nnn_record 类型的信号。
所以这一切正常,但是这些过程中的每一个都存储在 cpu VHDL 模块文件中,并且都存储在过程声明部分中,因此它们都在同一个范围内。
如果我与团队成员共享模型,他们将需要添加自己的测试子程序,而且这些子程序也都在文件中的相同位置,他们的模拟测试代码必须与我的一起进入“主”进程.
我宁愿从模型外部链接各种测试,并且只在模型文件中保留模型特定的程序..
具有讽刺意味的是,我可以将最低级别的硬件程序推送到一个包中,并从“主”进程中调用这些程序,但更高级别的进程不能放入该包或任何其他包中,因为它们没有访问cpu_read_record
和cpu_write_record
。
我觉得必须有一种简单的方法来清理这段代码并使其模块化,而我只是遗漏了一些明显的东西。
顺便说一句,我真的不认为制作命令解释器并将我的测试代码加载到行为 ROM 中是正确的方法。也不是与模拟器界面打架来连接一个 C 程序,但我可能会崩溃并尝试这个..