2016-08-26 18 views
0

マイコードに:上記のコードでのVerilog - 遅延SPIマスタースレーブインタフェースの実装上部モジュール(SPIマスタスレーブ)用

module top(en,en_s,sclk,data_rg,tr_rg,rst,s_rst,ss_bar,rcv_rg,m_data_rg); 
input [7:0] data_rg,tr_rg; 
input en,en_s,sclk,rst,s_rst,ss_bar; 
output [7:0] rcv_rg,m_data_rg; 
ms m1(.en(en),.data_rg(data_rg),.sclk(sclk),.rst(rst),.miso(miso),.mosi(mosi),.ss_bar(ss_bar),.rcv_rg(rcv_rg)); 
slv m2(.en_s(en_s),.tr_rg(tr_rg),.ss_bar(ss_bar),.sclk(sclk),.s_rst(s_rst),.mosi(mosi),.miso(miso),.m_data_rg(m_data_rg)); 
initial 
$display ("Transmitter data %d, %d",data_rg,tr_rg); 
endmodule 

、マスターモジュールが最初に実行されますと、スレーブが実行されます。今、私はインターフェイスの遅れに直面しています。全二重でなければなりません。 SPIマスタスレーブの

アーキテクチャ: Snap1

マスタースレーブのタイミング図 Snap2

+0

遅延後にモジュールをインスタンス化することはできません。インスタンス化モジュールとは、ボードにハードウェアを追加することを意味します。このハードウェアは、実世界のシナリオでは並行して動作します。だからどこに遅延を追加したいのですか?インスタンス化(不可能)またはモジュール自体(いくつかのカウンターを使用して行うことができます)にありますか? – sharvil111

+0

私は遅延を追加したくありません.....私はそれを望んでいます、なぜスレーブが8パルスでマスターのデータを受信する9 clkパルスでマスターの後ろの理由がスレーブのデータを受け取りますか?どこで –

答えて

0

あなたはおそらく、あなたのMSとSLVモジュールのソースを提供する必要があります。上で示したことから、スレーブにshf_rg [7:0]のワイヤ割り当てのようなものがあり、マスタユニットに登録されたshft_reg [7:0]のように見えます。私はあなたが次のことを考慮したい

//slave code 
reg [7:0] last_sft_reg; 
wire shf_reg[7:0]; // Notice not a register 
always (posedge clk) 
begin 
     last_sft_reg <= shf_reg; 
end 

assign shf_reg = {last_sft_reg[6:0],mosi}; // shf_reg updates immediately 
              // when mosi changes 

// master code 
reg [7:0] shft_reg; 
always (posedge clk or posedge reset) 
begin 
if (reset) 
    shft_reg <= 'h0; 
else 
    shft_reg <= {shft_reg[6:0],miso}; 
end 

よう

何か。実際には、全体で8クロックでコンテンツを処理している可能性があります。マスターでは1クロックのレイテンシが必要です。つまり、スレーブとマスターの速度は同じですが、トランザクションを並べると、マスターは1クロック後に開始し、1クロック後に終了します。説明するために、100のトランザクションを行う場合、マスターはまだスレーブの1クロック後に終了しますか?もしそうなら、それはおそらく問題ではないでしょう。