【博文连载】Wishbone总线从设备接口示例

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

图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。

表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文档描述规范功能随机数生成器,32比特从设备支持的总线周期类型从设备读写从设备块读写从设备RMW操作数据端口宽度数据端口粒度数据端口最大操作数尺寸数据传输顺序32832大端或者小端支持的信号及其对应WISHBONE信号列表align = "center"信号名 WISHBONE等效 ACK_O ACK_O CLK_I CLK_I DAT_I[7:0] DAT_I() DAT_O[7:0] DAT_O() RST_I RST_I STB_I STB_I WE_I WE_I SEL_I[3:0] SEL_I()

(0)

相关推荐

  • FPGA项目开发:204B实战应用-LMK04821代码详解(二)

    第一篇这里放个超链接: FPGA项目开发:基于JESD204B的LMK04821芯片项目开发经验分享 以后机会多多,慢慢分享一些项目开发以及学习方面的内容,欢迎各位大侠一起切磋交流.也欢迎进群交流,文 ...

  • 基于FPGA的扩频通信系统设计(附代码)

    导读 在无线通信系统中,普遍使用扩频通信技术,因此扩频技术对通信系统具有重要的现实意义.直接序列扩频技术是应用最广的一种扩频技术,FPGA具备高速度的并行性特点在无线通信系统中的优势日益增强,利用FP ...

  • 一天一个设计实例-PS/2键盘及鼠标的应用设计

    PS/2键盘及鼠标的应用设计 1.1.1键盘与单次操作 PS/2接口用于许多现代的鼠标和键盘,由IBM最初开发和使用.物理上的PS/2接口有两种类型的连接器:5脚的DIN和6脚的mini-DIN.图1 ...

  • 二进制转BCD码

    应用: 用fpga实现对数码管显示,以前通常的方法是进行整除和取余进行运算,但是fpga并不擅长乘法除法运算,所以可以用BCD码来转换. BCD码:通俗的可以理解为用四位二进制数表示一位十进制数字.例 ...

  • 【博文连载】Wishbone共享总线连接示例

    Wishbone共享总线连接与点到点连接同样重要.在本例中,两个主设备和两个从设备通过SYSCON实现了共享总线连接,在后续章节中,我们将使用该例子对Or1200进行基本RTL验证.系统复位后,一个或 ...

  • ​【博文连载】Wishbone总线介绍

    图29 Wishbone总线结构图 ● 所有应用使用一个总线体系结构: ● 简单.紧凑的体系结构: ● 支持多控制器: ● 64位地址空间: ● 8-64 位数据总线(可扩展): ● 单周期读和写: ...

  • 【博文连载】Wishbone总线地址译码

    很多总线标准中,从设备必须译码所有的地址,这称为全地址译码.比如在PCI总线中,每一个从设备都必须具有32位的地址输入,并对这32位的地址进行译码以确定如何响应主设备的请求. 片上总线规范比如Wish ...

  • 【博文连载】Wishbone总线地址不变突发结束方式

    地址不变突发是一个总线周期,在这个总线周期中完成多次操作,但是地址不变.地址不变突发的典型应用是以DMA方式读/写FIFO.主设备在时钟的某一个上升沿将CTI()置为3'b001后,下一个周期的操作必 ...

  • 【博文连载】Wishbone总线寄存反馈周期结束方式

    在Wishbone寄存反馈周期结束方式中,主设备需要事先通知从设备操作下一时钟周期是否将发起新的总线操作,这是通过周期类型识别地址标签CTI_O()/CTI_I()和突发类型扩展地址标签BTE_O() ...

  • 【博文连载】Wishbone总线同步结束与异步结束对比

    为了实现在给定时钟频率下的最大可能吞吐量,Wishbone采用了周期异步结束方式.这样做的结果是从主设备的STB_O到从设备的ACK_O/ERR_O/RTY_O再到主设备的ACK_I/ERR_I/RT ...

  • 【博文连载】Wishbone总线周期之数据组织

    说明:B.4版的Wishbone手册本节内容写的比较繁琐,因此没有像前文一样继续翻译.数据组织是指数据的传送顺序.目前常见的32为处理器的数据总线粒度为1字节,在传送时,一个32位数据的最高字节可以放 ...

  • 【博文连载】Wishbone总线周期之RMW操作

    在操作系统中,有一种重要的进程间的同步机制称作信号量机制.信号量即当前可用资源的计数.信号量是一个用来实现同步的整型或记录型(Record)变量,除了初始化外,对它只能执行等待和释放这两种原子操作.一 ...

  • 【博文连载】Wishbone总线周期之块写操作

    标准块写操作 图17显示的是一个标准的块写周期时序图.块写周期可以在每一个时钟周期完成一次数据传输.但是,本例中显示了主机和从机插入等待状态以控制数据传输速率的情况.图中一共显示了5个传输.第二次传输 ...