官术网_书友最值得收藏!

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文檔

主站蜘蛛池模板: 沙洋县| 宕昌县| 阳西县| 霞浦县| 仲巴县| 门头沟区| 泗洪县| 平江县| 固始县| 邹城市| 托克逊县| 额尔古纳市| 定边县| 区。| 正镶白旗| 于田县| 页游| 扬州市| 宁夏| 杂多县| 淮南市| 梓潼县| 都兰县| 台中县| 邢台县| 监利县| 宜宾市| 翁源县| 肥乡县| 治多县| 绥棱县| 罗甸县| 应城市| 峨眉山市| 阿拉善右旗| 玛沁县| 沙河市| 广昌县| 宁津县| 木里| 横峰县|