- 片上系統設計思想與源代碼分析
- 陳曦 黃毅
- 481字
- 2018-12-27 17:52:49
3.8 WISHBONE從設備接口示例
3.8.1 一個8比特從設備
前文曾經指出,WISHBONE總線規范是“輕量級(Lightweight)”規范,它實現起來非常簡單緊湊,接口需要的互聯邏輯非常少。這里給出一個WISHBONE從設備的一個例子,如圖3-19所示。該從設備由一個與門和8個D觸發器構成。在寫周期,當STB_I和WE_I同時有效,數據DAT_I[7:0]在時鐘CLK_I的上升沿被寫到觸發器中。

圖3-19 一個簡單的WISHBONE從設備
該從設備的RTL代碼如下:
module slave8bit(input CLK_I,//這里使用了Verilog 2001語法 input RST_I, input [7:0] DAT_I, input STB_I,input WE_I, output reg[7:0] DAT_O,output ACK_O); always @(posedge CLK_I or posedge RST_I ) begin if(RST_I) begin DAT_O<=8'h00; end else if(STB_I&WE_I)begin DAT_O<=DAT_I; end end assign ACK_O=STB_I; endmodule
該從設備的WISHBONE文檔如表3-4所示。
表3-4 從設備的WISHBONE文檔

3.8.2 一個32比特RTL級隨機數生成器從設備
下面舉一個實用一點的例子,一個隨機數生成器。該隨機數生成器的源代碼可以從http://www.opencores.org的Systemc/Verilog Random Number Generator項目下得到。該模塊端口定義如下:
module rng(clk,reset,loadseed_i,seed_i,number_o);
number_o為隨機數輸出,當loadseed_I有效時,種子seed_I被送入number_o成為隨機數的第一個值。隨機數每個時鐘周一期變化一次,可在任何時鐘周期讀取。
下面要將實例包裝成WISHBONE兼容的從模塊,其Verilog RTL代碼如下:
//Rng_wbc.v module Rng_wbc(input CLK_I, input RST_I, input [31:0] DAT_I, input STB_I,input WE_I, input [3:0] SEL_I, output [31:0] DAT_O,output ACK_O); assign ACK_O=STB_I; wire loadseed=WE_I&STB_I&(|SEL_I); wire [31:0] seed; assign seed[7:0] =SEL_I[0]?DAT_I[7:0] :8'h00; assign seed[15:8] =SEL_I[1]?DAT_I[15:8] :8'h00; assign seed[23:16]=SEL_I[2]?DAT_I[23:16]:8'h00; assign seed[31:24]=SEL_I[3]?DAT_I[31:24]:8'h00; wire [31:0] rand_number; assign DAT_O[7:0] =SEL_I[0]?rand_number[7:0] :8'h00; assign DAT_O[15:8] =SEL_I[1]?rand_number[15:8] :8'h00; assign DAT_O[23:16]=SEL_I[2]?rand_number[23:16]:8'h00; assign DAT_O[31:24]=SEL_I[3]?rand_number[31:24]:8'h00; //Instance of random number generator rng unit_rng(.clk (CLK_I) , .reset(RST_I),.loadseed_i(loadseed), .seed_i(seed), .number_o(rand_number)); endmodule
該從設備的WISHBONE文檔如表3-5所示。
表3-5 從設備的WISHBONE文檔

推薦閱讀
- Cocos2d Cross-Platform Game Development Cookbook(Second Edition)
- 零基礎PHP學習筆記
- TypeScript圖形渲染實戰:基于WebGL的3D架構與實現
- 自然語言處理Python進階
- Instant Nancy Web Development
- Learning jQuery(Fourth Edition)
- 移動增值應用開發技術導論
- 代碼閱讀
- 工業機器人離線編程
- Java EE架構設計與開發實踐
- Visual Basic程序設計實驗指導及考試指南
- Learning Cocos2d-JS Game Development
- 少兒編程輕松學(全2冊)
- Zend Framework 2 Cookbook
- Neo4j權威指南 (圖數據庫技術叢書)