一个简单的Wishbone从设备的RTL代码

电子说

1.3w人已加入

描述

一个8比特从设备

前文曾经指出,Wishbone总线规范是"轻量级(Lightweight)"规范,它实现起来非常简单紧凑,接口需要的互联逻辑非常少。这里给出一个Wishbone从设备的一个例子,如图21所示。该从设备由一个与门和8个D触发器构成。在写周期,当STB_I和WE_I同时有效,数据DAT_I[7:0]在时钟CLK_I的上升沿被写到触发器中。

Wishbone

图21 一个简单的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文档如表5。

Wishbone

表5 从设备的Wishbone文档

一个32比特RTL级随机数生成器从设备

下面我们举一个实用一点的例子,一个随机数生成器。随机数生成理论和随机数生成器随机数生成理论和随机数生成器模块的RTL代码见附录2。该模块端口定义如下:

module rng(clk,reset,loadseed_i,seed_i,number_o);

number_o为随机数输出,当loadseed_I有效时,种子seed_I被送入number_o成为随机数的第一个值。

我们的目的是将其包装成WISHBONE兼容的从模块,其Verilog RTL代码如下:

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;     //随机数生成器的莉化     rng unit_rng(.clk(CLK_I),.reset(RST_I),                            .loadseed_i(loadseed),.seed_i(seed),                            .number_o(rand_number)); endmodule

该从设备的Wishbone文档如表6。

表6 从设备的Wishbone文档

Wishbone

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分