2016-12-22 3 views
0

私はFPGAとCPUを使用するデザインをシミュレートしています。 CPUはSPIを介してFPGAと通信し、FPGAは通信されたデータに基づいていくつかの出力を制御します。Verilog testbench - タスクを使用してインクルードファイルから信号を駆動しますか?

私はシミュレーションを実行しており、シミュレートされたCPUテストベンチはSPIを介してFPGAレジスタを読み書きできます。今私はそれを少しクリーナーにするために私のコードをリファクタリングしたい。

私はテストベンチでインスタンス化されtb_system_interfaceモジュールが含まれていtb_system_interface.vと呼ばれる私のトップレベルのテストベンチでSPIを介してデータを送信する複数のタスクを、持っています。最低レベルのタスクは、spi_send_byteと呼ばれ、MOSIラインからデータを受け取り、MISOラインでデータを受け取り、SCLKを駆動します。他のより高いレベルのタスクを読み出して(例えば設定PWM値、設定された出力値、など)

私は新しいファイルにSPIトランザクションをリファクタリングしようとした出力を制御するFPGA上のレジスタの書き込み、tb_sim_spi_tasks.vと呼ばれます。私はこのファイルをtb_system.vファイルに含めます。もちろん、私のspi_send_byteタスクは、SPIシグナルを持つモジュールの内部に存在しないため、機能しません。

私は何をしようとしているのですか?モジュール定義を複数のファイルに分散することは可能でしょうか?あるいは、私のテストベンチによって出力されるタスクが設定できる何らかのグローバル変数?

答えて

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. 
関連する問題