Wishbone paylaşımlı veri yolu bağlantısı, noktadan noktaya bağlantı kadar önemlidir. Bu örnekte, iki ana cihaz ve iki bağımlı cihaz, SYSCON aracılığıyla paylaşılan bir veri yolu bağlantısı gerçekleştirdi Sonraki bölümlerde, bu örneği Or1200'de temel RTL doğrulaması yapmak için kullanacağız. Sistem sıfırlandıktan sonra, bir veya daha fazla ana cihaz, CYC_O'yu yüksek olarak ayarlayarak veriyolunun kullanılmasını talep eder. Hakem (daha sonra tartışılacaktır), ana cihazlardan birini #X (X, 0 ile N arasındadır) ve yalnızca ona karşılık gelen ana cihazı seçer. GNTX sinyali yüksek olarak ayarlanır ve diğer GNT sinyalleri, INTERCON'a veriyolunu hangi ana aygıtın kullanabileceğini bildirmek için düşük olarak ayarlanır.
Ana cihaz seçildikten sonra, çıkış sinyali seçici aracılığıyla paylaşılan veri yoluna ve ardından her bir bağımlı cihaza gönderilecektir. Örneğin, ana cihaz # 0 veriyolunu kullanabiliyorsa, ADR, DAT_O, SEL_O, WE_O ve STB_O sinyalleri her bir bağımlı cihaza gönderilecektir. Aynı zamanda, veriyolunu kullanmayı talep eden diğer cihazlar, ACK_I / ERR_I / RTY_I veriyolu döngüsü bitiş sinyalini asla almayacaktır.
Slave cihaz nasıl seçilir Sistemde M slave cihaz varsa, adres hattı her bir slave cihazın adres alanını temsil etmeyecek şekilde adres dekoderi tarafından M parçalarına bölünür. Bağımlı cihaz # Y'ye karşılık gelen kod çözme çıkış sinyali, paylaşılan veriyolu üzerindeki STB_I sinyali ile AND'lanır.STB_I sinyali ve bağımlı cihaz # Y'ye karşılık gelen kod çözme çıkış sinyali aynı anda yüksekse, bağımlı cihaz #Y, ana cihazın çalışmasına bir yanıt başlatır. .
Her bir bağımlı cihaz tarafından veriyolu döngüsü çıkışının ACK_O / ERR_O / RTY_O'su, OR geçidi üzerinden her ana cihazın ACK_I / ERR_I / RTY_I'sine gönderilir. Bağımlı aygıtın DAT_O çıkışı, seçici aracılığıyla her ana aygıtın giriş terminaline gönderilir ve bu seçicinin girişi, paylaşılan adres veriyoludur.
Şekil 22 Seçiciye göre Wishbone paylaşılan veri yolu bağlantısı örneği
Intercon modülünün kaynak kodu aşağıdaki gibidir:
modül intercon2M2S (clk_i, rst_i, wb0s_data_i,
wb0s_data_o, wb0_addr_i, wb0_sel_i,
wb0_we_i, wb0_cyc_i, wb0_stb_i, wb0_ack_o,
wb0_err_o, wb0_rty_o, wb0m_data_i,
wb0m_data_o, wb0_addr_o, wb0_sel_o,
wb0_we_o, wb0_cyc_o, wb0_stb_o, wb0_ack_i,
wb0_err_i, wb0_rty_i, wb1s_data_i,
wb1s_data_o, wb1_addr_i, wb1_sel_i,
wb1_we_i, wb1_cyc_i, wb1_stb_i, wb1_ack_o,
wb1_err_o, wb1_rty_o, wb1m_data_i,
wb1m_data_o, wb1_addr_o, wb1_sel_o,
wb1_we_o, wb1_cyc_o, wb1_stb_o, wb1_ack_i,
wb1_err_i, wb1_rty_i
);
... // Port tanımı burada yok sayılır
// Arbiter, iki ana cihaz, iki bağımlı cihaz
GNT0, GNT1, CYC kablosu;
arbiter2M2S arbiter2M2S (.CLK (clk_i), .RST (rst_i), .CYC0 (wb0_cyc_i), .CYC1 (wb1_cyc_i),
.GNT0 (GNT0), .GNT1 (GNT1), .CYC (CYC));
// Adres kod çözücü
kablo ACMP0, ACMP1;
tel paylaşılan_adresi;
address_decoder2S
adres_kod çözücü2S (.addr_i (paylaşılan_adresi) ,. ACMP0 (ACMP0) ,. ACMP1 (ACMP1));
// Her bir ana cihazdan her bir bağımlı cihaza veri yolu döngüsü geçerli CYC sinyalini paylaşın wb0_cyc_o = CYC atayın;
wb1_cyc_o = CYC atayın;
// Paylaşılan adres sinyali
paylaşılan_adresi = GNT1? wb1_addr_i: wb0_addr_i;
wb0_addr_o = paylaşılan_adres atayın;
wb1_addr_o = paylaşılan_adres atayın;
// Her ana cihazdan her bir bağımlı cihaza paylaşılan veri yolu
wire shared_data_m2s = GNT1? wb1m_data_i: wb0m_data_i;
wb0s_data_o = paylaşılan_veriler_m2'leri atayın;
wb1s_data_o = paylaşılan_veriler_m2'leri atayın;
// Her bağımlı cihazdan her ana cihaza paylaşılan veri yolu
wire shared_data_s2m = ACMP1? wb1s_data_i: wb0s_data_i;
wb0m_data_o = paylaşılan_veriler_s2m atayın;
wb1m_data_o = paylaşılan_veriler_s2m atayın;
// Her bir ana cihazdan her bir bağımlı cihaza seçim sinyalini paylaşın
tel paylaşımlı_sel = GNT1? wb1_sel_i: wb0_sel_i;
wb0_sel_o = paylaşılan_sel atayın;
wb1_sel_o = paylaşılan_sel atama;
// Her ana cihazdan her bir bağımlı cihaza paylaşılan yazma etkinleştirme sinyali
wire shared_we = GNT1? wb1_we_i: wb0_we_i;
wb0_we_o = shared_we atayın;
wb1_we_o = shared_we atayın;
// Her bir ana cihazdan her bir bağımlı cihaza paylaşılan strobe sinyali
tel paylaşımlı_stb = GNT1? wb1_stb_i: wb0_stb_i;
atama wb0_stb_o = ACMP0? shared_stb: 1'b0;
atama wb1_stb_o = ACMP1? shared_stb: 1'b1;
// Her bağımlı cihazdan her bir ana cihaza yanıt sinyali
tel paylaşımlı_ack = ACMP0? wb0_ack_i: wb1_ack_i;
wb0_ack_o = paylaşılan_ack atayın;
wb1_ack_o = paylaşılan_ack atayın;
tel paylaşımlı_err = ACMP0? wb0_err_i: wb1_err_i;
wb0_err_o = shared_err atayın;
wb1_err_o = shared_err atayın;
tel paylaşımlı_rty = ACMP0? wb0_rty_i: wb1_rty_i;
wb0_rty_o = paylaşılan_rty atayın;
wb1_rty_o = paylaşılan_rty atayın;
son modül