




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章硬件线程与接口LOREMIPSUMDOLOR目录CONCENT9.1硬件线程的基本概念9.2硬件线程的连接9.3硬件线程的同步9.4实例9.5异步硬件线程的连接9.6接口9.7实例9.1硬件线程的基本概念GRADUATIONTHESIS9.1硬件线程的基本概念基本概念:硬件线程中,变量一般都存储在寄存器和内存中,数据路径只负责数据计算。当数据路径的组合逻辑进行计算时,如移位操作、算术操作等,寄存器和存储器内的变量值将会被取出、更新,然后重新存储。该过程称之为寄存器传输。寄存器传输的顺序由有限状态机控制,因此硬件线程也被称之为具有数据路径的有限状态机。与软件线程的区别:(1)SystemVerilog语言作为一种硬件设计语言,它的每一个always语句块和assign语句都会对应一个具体的硬件线路或者门电路,即硬件线程在整个系统中一直处于活动状态中。(2)在SystemVerilog语言,硬件线程是硬件线程是一类可用于综合的线程,而软件线程只能用于仿真与验证。9.1硬件线程的基本概念9.1.1数据路径假设要实现一个64位并行数据在时钟信号的作用下转为串行信号进行传输。系统首先进行复位,串行信号输出高阻态,一旦侦测到一个一位时钟周期的ld_l低脉冲,系统开启数据传输,当传送完毕后,系统返回IDLE状态,并继续等待下一次的ld_l的有效信号的到来。分析该波形图,可以看出,整个波形可以分为两个状态:等待状态和数据传输状态。状态切换通过侦测ld_l的低脉冲时钟和数据传输数量两个事件。9.1硬件线程的基本概念采用两段式状态机进行设计。其状态跳转代码如下:enumlogic{IDLE=1'b0,TRANS=1'b1}cs,ns;
always_ff@(posedgeclk,negedgerst_)if(!rst_)cs<=IDLE;elsecs<=ns;
always_combbeginuniquecase(cs) IDLE:ns=!ld_l?TRANS:IDLE; TRANS:ns=(count_to||!ld_l)?IDLE:TRANS; endcaseend9.1硬件线程的基本概念从图可以看出,本例中的数据路径是串并转换的移位逻辑。具体的SystemVerilog代码如下。在时钟有效边沿下,把data_reg的最高位输出,同时把data_reg向右移动一位,最低位补1’bz。ser_data<=data_reg[63];data_reg<={data_reg[62:0],1'bz};9.1硬件线程的基本概念数据路径的功能:在有限状态机和外部信号的控制之下,系统会在TRANS状态下,进行计数和数据传输,并会输出响应的状态反馈给有限状态机,从而使得有限状态机能够根据内部状态而采取相应的动作。assignshift_en=(cs==TRANS)&ld_l;always_ff@(posedgeclk,negedgerst_)if(!rst_)beginser_data<=1'bz; data_reg<=data_in;endelseif(shift_en)beginser_data<=data_reg[63]; data_reg<={data_reg[62:0],1'bz};endelseif(count_to||!ld_l)beginser_data<=1'bz; data_reg<=data_in; end在该代码中,ld_l是外部信号,用来控制数据路径的工作,因此称这些信号为控制信号。9.1硬件线程的基本概念
当数据路径的组合逻辑计算到某个程度时,会使某些信号有效,从而通知有效状态机判断是否进行状态跳转。这些信号称为状态信号。always_ff@(posedgeclk,negedgerst_)if(!rst_)begin count<=6'b0; endelseif(shift_en)count++;
assigncount_to=(count==63);
当数据路径进行数据移位时,计数器进行计数,当计数到63时,整个传输完毕,count_to有效,从而通知有限状态机进行状态跳转至IDLE状态。因此状态信号是数据路径中的组合逻辑信号进行运算后得出的结果。
数据路径既可以是时序逻辑,如上述示例的移位操作,也可以是组合逻辑,如对数据进行加减乘除等组合运算,或者对收集到的数据进行CRC运算。always_combuniquecase(op)AND:result=a&b;OR:result=a|b;BAND:result=&a;BOR:result=|b;endcase9.1硬件线程的基本概念modulemem#(DWIDTH=8,DEPTH=256, AWIDTH=$clog2(DEPTH)) ( inputlogic[AWIDTH-1:0]addr, inputlogicre,we,clk, inouttri[DWIDTH-1:0]data);
logic[AWIDTH-1:0]m[DEPTH]; assigndata=re?m[addr]:'bz;
always@(posedgeclk) if(we) m[addr]<=data;
endmodule
数据路径可以实现编码、解码、总线以及存储等操作。如采用数据路径实现存储操作的代码如下:$clog2(DEPTH)是SystemVerilog的一个系统函数,表示以2为底的DEPTH的对数。当DEPTH不是2的指数时,求出的结果N满足2N>DEPTH>2N-1。9.1硬件线程的基本概念
和有限状态机相似,硬件线程的算法描述不仅包含有限状态机的各种变量,还包含数据路径的变量集合。因此,整个算法描述如下:其中,X表示系统的输入数据和控制变量,在上例中,X={ld_l,data_in};Z表示系统的输出数据和状态变量,在上例中,Z={ser_data};S表示有限状态机的状态,在上例中,S={IDLE,TRANS},其中初始状态为IDLE。δ表示有限状态机的跳变函数:XxS->S。它是输入信号和现态的函数。λ表示有限状态机的输出函数。它分为Mearly型状态机和Moore型状态。λMearly:XxS->Z;λMoore:S->Z;V表示对数据路径进行计算时所使用的数据矢量和数组的变量,如data_reg。O表示数据路径采用的操作符集合,如+,-,>>,<<等P表示采用的协议,通常采用文本描述或者波形描述C表示驱动时钟R表示全局复位信号9.1.2硬件线程的算法描述9.2硬件线程的连接GRADUATIONTHESIS9.2硬件线程的连接CPLD/FPGA内会存在各种不同的硬件线程。硬件线程之间可以通过某种协议进行连接通信。如图所示。
硬件线程1和硬件线程2和3都有连接,硬件线程3和硬件线程4相互连接。硬件线程1产生各种信息,并发给硬件线程2和硬件线程3,因此硬件线程1被称为生产者,而硬件线程2和硬件线程3被称为消费者。同样,对于硬件线程3和4来说,硬件线程3提供信息给硬件线程4,因此硬件线程3是生产者,硬件线程4是消费者。因此,在一个系统中,某个硬件线程既可以是生成者,也可以是消费者。硬件线程连接示意图9.2硬件线程的连接
以FIFO为例,FIFO是一个先进先出队列,当FIFO为空时,它会发出请求信号给FIFO控制器,FIFO控制器确认该FIFO为空时,就会把写入使能信号WrEn有效,同时驱动data数据线有效。一旦FIFO快满的时候,FIFO将发出快满的状态信号通知FIFO控制器,FIFO控制器不再写入数据。因此,FIFO是一个硬件线程,FIFO控制器为一个硬件线程。其示意图如下。FIFO写数据示意图9.2硬件线程的连接
具体分析此连接,但Empty有效时,FIFO请求FIFO控制器发送数据,FIFO控制器输出写使能有效,同时传送数据给FIFO,在这一过程中,FIFO控制器产生数据,因此是生产者,而FIFO是请求数据,并接收数据,因此是消费者。
同时,FIFO控制器在传送数据的同时,一直在侦测AlmostFull状态信号是否有效,也就是说,FIFO接收数据的同时,也会根据自身的容量是否饱和而发出AlmostFull信号,因此在这一过程中,FIFO控制器处于被动接收数据的状态,而FIFO处于主动发送信号状态,因此FIFO是生产者,而FIFO控制器为消费者。
在CPLD/FPGA中,硬件线程之间通过控制信号进行握手并传递数据和状态的动作,称为协议。协议包括数据传输以及各种控制信号,如本例中的Emtiy和AlmostFull等信号。9.3硬件线程的同步GRADUATIONTHESIS9.3硬件线程的同步
当硬件线程进行通信时,线程之间需要知道各自对方的状态信息,并根据对方的状态接收、发送控制命令或者状态信息,传送数据等,因此进程之间需要进行状态同步。通常采用wait状态进行同步。所谓的wait状态,就是当外部输入信号无效时,硬件线程会一直停留在该状态,一旦有效,则跳出该状态,进入下一个状态。在状态跳转图中,一般采用弧形箭头表示。如下图所示。Wait状态示意图9.3硬件线程的同步
改写状态跳转图
线程A在运行过程中,当跳转至状态START时,会把ld_l拉低,同时跳转至REV_DATA状态,等待接收数据。线程B一开始就处于等待状态,如果ld_l没有拉低,则一直等待,当ld_l有效时,线程B跳出等待状态,进入TRANS状态。
因此,线程A和B会在ld_l有效的下一个时钟的有效边沿的作用下,同时跳出START和IDLE状态,并同时进入REV_DATA和TRANS状态。这样,线程A和B到达START状态和IDLE状态可能时间不同,但通过ld_l信号可以让线程A和B同时跳出,因此这就叫做状态同步。同步后的两个线程无需外部控制信号进行协助,可以各自独立工作,并且知道对方的工作态度。
如线程B在TRANS状态时,会把并行64位数据转换成串行数据,在64个时钟的有限边沿作用下,一一传送出去。而线程A同时处于REV_DATA状态,因此会在同一个时钟边沿接收到来自线程A的数据,并进行处理。A和B之间无需额外的通信。9.3硬件线程的同步
当两个硬件线程进行连接通信时,可以上图一样单个硬件线程中存在等待,当多个硬件线程同时进行通信时,如在高密度服务器中,节点服务器和RCM中的控制器之间的通信。硬件线程之间的同步示意图9.3硬件线程的同步
节点服务器需要发送请求信号给RCM控制器并等待来自RCM控制器的应答信号,只有应答信号有效,节点服务器和MCU之间才可以进行通信。整个通信模型如下图所示。
当进程A运行到REQ_SEND状态时,发出REQ_N请求信号并等待GNT_N信号的到来,一旦GNT_N信号有效,则跳出该状态,同时进程B运行到GNT_SEND状态时,将等待有效的REQ_N信号,一旦有效,就发出GNT_N的有效信号,同时跳出该状态。硬件进程双边等待状态示意图9.3硬件线程的同步
尽管进程A和B进入REQ_SEND和GNT_SEND的状态的时间不同,但通过REQ_N和GNT_N两个信号进行同步,它们跳出该状态的时间相同,从而实现了状态同步。如下图所示
一旦两个状态同步,在特定的条件下,后续的状态可以持续同步,这种同步称之为lock-step同步。状态同步示意图9.3硬件线程的同步
如下图所示,当线程A和线程B从REQ_SEND和GNT_SEND同时跳出时,会同时进入A1和B1状态,因此,当线程A在状态A1时,线程B将处于B1状态,当处于A2状态时,线程B处于B2状态,当处于A3状态时,线程B处于B3状态。线程A和B无需控制信号的交互,就可以知道对方的状态,直到遇到如下情形:线程的某个状态为数据驱动型的循环线程的某个状态为条件分支语句或者该线程的某个状态还需要等待其他状态跳转条件
Lock-step同步示意图9.3硬件线程的同步
修改Lock-step同步示意图如下,在线程B1和B3之间增加了一个条件状态B4,如果在B1状态出现B的条件,则跳转至B2状态,如果出现C的条件,则跳转至B4状态。则线程A和线程B在REQ_SEND和GNT_SEND状态同步后,进入A1和B1状态。单方向锁定的硬件线程同步示意图9.4实例:基于串并转换的硬件线程连接实现GRADUATIONTHESIS9.4基于串并转换的硬件线程连接实现
基于应答响应串并转换的通信时序波形图如下并串转换波形示意图9.4基于串并转换的硬件线程连接实现线程连接示意图根据该波形示意图,硬件线程连接如下9.4基于串并转换的硬件线程连接实现Master_Interface硬件线程主要的工作包括:侦测来自Slave的请求和ID信号并发送给Master,侦测来自Master的应答信号,并接收来自Master的数据并提示Slave接收到的数据类型,发送应答信号给Slave,串并转换发送数据给Slave,结束应答并等待来自Slave的请求信号失效。
整个设计分为五个状态:MA~ME,其中MA为系统初始状态,一旦异步复位,系统就进入MA状态。MA、MB、MD和ME为Wait状态,其中MA、MD和ME用于和Slave_Interface同步,MB用于和Master线程之间的状态同步
硬件线程主要通过外部的REQ_N,Grant信号进行控制,并输出ld_dataUp、ld_datalo、shift_en、count_to、RequestM、short_data和GNT_N等状态信号。9.4.1Master_Interface硬件线程介绍9.4基于串并转换的硬件线程连接实现Master_Interface硬件线程状态跳转图9.4基于串并转换的硬件线程连接实现
在MB到MD状态中,Master_Interface硬件线程采集来自Master线程的数据,并串行输出给Slave端,整个数据路径设计如下Master_Interface数据路径9.4基于串并转换的硬件线程连接实现Slave_Interface硬件线程主要的工作与Master_Interface硬件线程一一对应,包括:侦测来自Slave线程的请求信号,并取反后连同SlaveID信号发送给Master_Interface线程,侦测来自Master端的应答信号,一旦侦测到,启动串并转换逻辑接收数据,数据接收完毕,对数据进行分组发给Slave,传输完毕后,等待来自Slave的请求信号失效,并通知Master端。
硬件线程主要通过外部的RequestS,GNT_N和short_data信号进行控制,并输出REQ_N、data_latch_en、shift_en、par_data_en等状态信号。
整个设计分为五个状态:SA~SE,其中SA为系统初始状态吗,一旦异步复位,系统就进入SA状态。9.4.2Slave_Interface硬件线程介绍9.4基于串并转换的硬件线程连接实现Slave_Interface状态跳转示意图9.4基于串并转换的硬件线程连接实现Slave_Interface数据路径
和Master_Interface线程的数据路径不同,Slave_Interface线程的数据路径需要采集数据并进行数组切分,对应的是SC和SD状态,在SC状态,串行数据ser_data在控制信号shift_en的作用下,由低到高传入64位并行寄存器。9.4基于串并转换的硬件线程连接实现9.4.3代码实现1.顶层模块为行为级描述,对master_interface和slave_interface直接例化,同时生成全局时钟和全局异步复位信号。2.master_interface硬件线程的描述,采用SystemVerilog语言进行硬件线程的设计。3.Slave_Interface硬件线程的介绍,采用SystemVerilog语言对该硬件线程进行设计。4.整体程序设计如上。为验证此设计是否准确,在顶层模块中加入仿真程序,采用task设计,写入数据32’haa_bb_cc_dd,验证slave_interface线程在4个时钟节拍下是否会依次输出aa,bb,cc和dd。9.4基于串并转换的硬件线程连接实现
采用Modelsim进行仿真,仿真结果如下,从波形中可以看出整个设计的逻辑和功能满足设计要求。基于串并转换的硬件线程仿真波形图9.5异步硬件线程的连接GRADUATIONTHESIS9.5异步硬件线程的连接
异步硬件线程可以采用多种连接方式进行连接。一种方式是采用两个缓冲器进行连接。乒乓操作示意图
采用两个缓冲器,硬件线程生产者把数据送至A缓冲器的同时,消费者读取B缓冲器,当数据存储到A缓冲器完毕后,生产者切换数据线至B缓冲器,同时消费者从A缓冲器中读取数据,如此循环反复。这样不仅可以解决异步连接问题,而且可以提高数据传输效率。这也称之为“乒乓操作”。9.5异步硬件线程的连接
这种方式仅适合数据量比较少的情况,如果数据量比较大,特别是在某一时刻突然爆发,这种方式不太适合。替代的方式是采用队列来进行。常见的队列是FIFO。FIFO是先进先出队列。
现有的FPGA/CPLD平台,一般可以通过直接调用IP的形式直接调用FIFOIP,简单、直接、方便。也可以采用SystemVerilog语言直接描述一个任意数据宽度和数据深度的FIFO。
参考代码基于RAM来实现FIFO,其最关键在于读写地址互相与写读时钟域进行同步,并通过格雷码的特性进行空和满的判断。
除了以上两个方式,还可以通过CPLD/FPGA内嵌的RAM等方式实现异步硬件线程的连接。读者可以自行参考各自平台的CPLD/FPGA进行具体设计。9.6接口GRADUATIONTHESIS9.6接口
随着IC设计复杂度的提高,模块间、硬件线程之间的互连变得更为复杂,SystemVerilog新增了一个新的数据类型——接口来确保硬件线程能够准确和其他硬件线程之间的正确连接和通信。
接口采用关键字interface表示,并以endinterface结束。表示硬件线程之间的连线的结构。但接口不仅仅是连线组合,它还可以定义通信协议,以及协议校验和其他检验程序,同时也支持initial和always等语句块,并且支持各种task和function。
接口为硬件模块的端口提供了一个标准化的封装方式,和模块的定义很相似,可以包含类型声明、任务、函数、过程语句、语句块和断言等。但接口独立于模块,不可以有设计层次,接口不可以包含模块或原语的实例,接口可以用于模块端口,模块端口内不可以使用模块。接口中可以包含modport表示连接到接口的模块的访问接口的方向,但模块没有此关键字。接口还为模块间连接提供了紧凑型的连接结构。接口简介9.6接口
接口可以拥有端口,并且这些端口是接口所描述的一组信号的一部分,这些端口通常是时钟、复位以及测试信号等,接口可以包含Verilog和SystemVerilog中任何类型的声明。如定义一个简单的存储接口:interfacemembus(inputlogicclk);
logicWrEn;logicRdEn;logicmrdy;logic[31:0]addr;logic[63:0]comi_data;logic[63:0]cimo_data;
endinterface简单的存储接口示例
在该接口定义中,首先声明了接口名称为membus,接着定义了专门的输入时钟端口,并且声明了存储总线通信的信号,包括写使能、读使能、数据准备好信号、地址信号以及数据信号等。整个接口以interface开始,并且以endinterface结束。9.6.1接口声明和例化9.6接口
接口可以例化,其例化的方式和模块一样。可以使用简化的端口连接.name和.*来实现。如该存储接口进行例化如下:moduletop;logicclk;logicWrEn,RdEn;logicmrdy;logic[31:0]addr;logic[63:0]comi_data,cimo_data;
membusmb(.*);endmodule简单的存储接口例化示例9.6接口9.6.2modportinterfacemembus(inputlogicclk);
logicWrEn;logicRdEn;logicmrdy;logic[31:0]addr;logic[63:0]comi_data;logic[63:0]cimo_data;
modportCPU(inputclk,mrdy,cimo_data,outputWrEn,RdEn,addr,comi_data);
modportMEM(inputclk,WrEn,RdEn,addr,comi_data,outputmrdy,cimo_data); endinterface
采用modport实现的接口示例
接口内定义了两个modport,分别是CPU和MEM,其中CPU作为主设备往MEM读写数据。Modport声明只是使互相连接的模块将信号看成是input、output、inout还是ref等。9.7采用接口实现SGPIO的数据传送GRADUATIONTHESIS9.7采用借口实现SGPIO的数据传送9.7.1SGPIO简介SGPIO总线是一类为布线资源紧张而采用的一类总线,通常会由总线发起者master和接收者slave组成,master和slave一一对应。整体结构图如下。其中黑色方框表示接口。接口的输入信号为clk和rst_。SGPIO总线接口示意图9.7采用借口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中班唤醒身体课件
- 2024-2025学年吉林省长春汽车经济技术开发区初三下学期5月阶段检测试题化学试题含解析
- 甘肃政法大学《内儿科康复学》2023-2024学年第二学期期末试卷
- 武汉东湖学院《电算在建筑结构中的应用》2023-2024学年第二学期期末试卷
- 北京市第二十七中学2025届高三二模冲刺(六)物理试题含解析
- 2025年山东省鄄城一中高三下学期联考押题卷数学试题试卷含解析
- 抽搐查因护理查房
- 十万个为问答知识竞赛
- 技术岗位质量培训
- 电梯电磁兼容检验技术解决方案
- (完整版)创伤后应激障碍量表平民版_PCL-C
- 施工总平面布置和临时设施布置技术标
- 曼昆《经济学原理》(微观经济学分册)第8版 全部答案
- Q∕GDW 12070-2020 配电网工程标准化设计图元规范
- (精心整理)小学英语特殊疑问句练习(带答案)
- 旋片泵设计说明书
- 小学一年级100以内加减法口算题(五篇)
- 广西壮族自治区建筑装饰装修工程消耗量定额(2013版)
- 中国历史朝代简表全
- 铁总计统【2017】177号关于进一步加强铁路建设项目征地拆迁工作和费用管理的指导意见
- 立式水轮发电机轴线分析及处理
评论
0/150
提交评论