我正在模拟使用FPGA和CPU的设计。 CPU通过SPI与FPGA通信,FPGA根据传输的数据控制一些输出。
我已经启动并运行了模拟,我的模拟CPU测试平台可以通过SPI读写FPGA寄存器。现在我想重构我的代码,使它更清洁一点。
我在顶层测试平台中通过SPI发送了几个通过SPI发送数据的任务,名为 tb_system_interface.v ,其中包含由testbench实例化的tb_system_interface模块。最低级别的任务称为 spi_send_byte ,它将数据发送到MOSI线路,在MISO线路上接收并驱动SCLK。其他更高级别的任务在FPGA上读写寄存器来控制输出(例如设置PWM值,设置输出值等)
我尝试将SPI事务重构为一个名为 tb_sim_spi_tasks.v 的新文件。我将此文件包含在tb_system.v文件中。当然,现在我的 spi_send_byte 任务不起作用,因为它不再位于其中包含SPI信号的模块内。
有没有办法做我想做的事情?是否可以跨多个文件传播模块定义?或者某种全局变量,该任务可以设置由我的测试平台输出?
答案 0 :(得分:0)
我发现了如何做到这一点,我从错误的位置包含了该文件。而不是顶部的所有包含,包含需要在模块内。 以下是原始代码:
`timescale 1ns/100ps
`include "ch_defines.v"
`include "tb_sim_spi_tasks.v"
module tb_system_interface(
output reg SYSTEM_EXTERNAL_RESET_N,
output reg SYSTEM_CLOCK,
output reg system_sclk,
output reg system_mosi,
output reg system_cs_n,
input wire system_miso,
input wire sys_ok // Flag that CCC is locked
);
parameter SYSCLK_PERIOD = 10; // 10ns period = 100MHz.
这就是修复:
`timescale 1ns/100ps
`include "ch_defines.v"
module tb_system_interface(
output reg SYSTEM_EXTERNAL_RESET_N,
output reg SYSTEM_CLOCK,
output reg system_sclk,
output reg system_mosi,
output reg system_cs_n,
input wire system_miso,
input wire sys_ok // Flag that CCC is locked
);
`include "tb_sim_spi_tasks.v"
parameter SYSCLK_PERIOD = 10; // 10ns period = 100MHz.