1、将turbo51挂接在AHB总线并实现加法功能1. 整体架构整体架构如下图所示 : 图1上图由八部分组成,它们分别为用于储存加数的add1_ram模块和add2_ram模块,用于储存加法和的sum_ram模块,用于完成加法功能的turbo51模块,用于判断优先级高低的arbiter模块,用于实现51接口与AHB接口连接适配的适配模块adapt_block.,用于选择读写哪个ram的decoder译码模块。用于连续输出1024个数据的output_block模块。 2. 整体架构描述 图2上图为一个基于AMBA AHB的系统,AMBA AHB 总线协议设计使用一个中央多路选择器互联方案,使用该方
2、案所有总线主机设备输出地址和控制信号来指示它们想执行的传输同时仲裁器决定哪一个主机能够将它的地址和控制信号联通到所有的主机,当然就需要一个译码器来控制读数据和相应多路信号选择器,多路信号选择器选中来自传输中所包含从机的适当信号。此项目包括adapt_block和output_block两个主机模块及add1_ram,add2_ram,sum_ram三个从机模块.以及用于选择从机信号的decoder模块和用于判断主机优先级的arbiter模块.其中add1_ram,add2_ram用于存储加数,sum_ram用于存储加法和.output_block模块用于连续输出1024个加法和.此项目的核心模
3、块为adapt_block模块,它将turbo51例化,并通过AHB总线将add1_ram和add2_ram中的数读入其模块并通过databus将加数送入turbo51中进行加法运算,最后将得出的加法和结果写入sum_ram模块中。此模块既包括对add1_ram,add2_ram和 sum_ram的读写控制,也包括对51接口和AHB接口的适配的实现。为此次项目的重点。 3. 各模块功能及其时序本节是这篇文档的关键部分,主要论述了各个功能块的结构,对相应的时序也作了说明。图33.1 ADD1_RAM模块接口说明:PINI/ODISCRIBEHCLKI时钟信号,为所有总线提供时基。所有信号时序都和
4、HCLK的上升沿相关。HRESETnI系统的复位信号低有效并用来复位系统和总线,这是唯一的低有效的信号。DINI从tb中输入,用于向ram中输入数据。WRITEI从tb中输入,用于控制ram1的写操作。HSEL_RAM1I用于选择RAM1进行读写操作的选择信号。HADDR31:0I从主机输出给从机的地址,用于选择相关地址。32位系统地址总线。HWRITEI从主机输出给从机的信号,用于指示读写操作。当为高表示一个写操作,为低表示一个读操作。HTRANS1:0I表示当前传输的类型,可以是不连续,连续,空闲和忙。HSIZE2:0I表示传输的大小,典型情况是字节(8位),半字(16位),或者是字(32
5、位)。协议允许最大的传输大小可以达到1024位。HBURST2:0I表示传输是否组成了突发的一部分,支持四个,八个或者16个节拍的突发传输并且突发传输可以是增量或者是回环。HWDATA31:0I写数据总线用在写操作期间从主机到总线从机传输数据,建议最小的数据总线宽度为32位,然而,在要求高宽带运行时扩展(数据总线)还是很容易的。HREADY_RAM1O当HREADY为高时表示总线上的传输已经完成,在扩展传输时该信号可能会被拉低。HRESP_RAM11:0O传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY,ERROR,RETRY,SPLITHRDATA_RAM131:0O读数据总线
6、用来在读操作期间从总线从机向总线主机传输数据,建议最小的数据总线宽度为32位,然而在要求高宽带运行时扩展(数据总线)还是很容易的。FULL_1O表示当前RAM1已经写满(2)接口框图:图4(3)逻辑图:图5由于自动生成的RAM8_1024的输入和输出的数据和地址与总线所要求的位数不匹配,故需要通过ADD1_RAM对生成的RAM8_1024进行操作,使其能够连接在总线上并完成读和写的操作。由上图可以看出当WRITE为高电平时,对RAM8_1024进行写操作,此时依次将DIN中的数据存储于RAM8_1024中,当WRITE为低电平时,读出haddr中的数据dout,并通过位拼接将24B0,dout
7、作为hrdata_ram1送入总线,从而实现将RAM8_1024挂接在总线上实现读写功能。(4)内部详细设计:这个模块为ADD1_RAM模块,深度为1024,数据位宽为8位。主要用于存储加数。通过tb来控制ADD1_RAM的写操作且从tb中输入数据进入ADD1_RAM。该模块对自动生成的ram模块进行例化。由于自动生成的ram模块没有读控制信号,其在地址addr输入以后会自动读出数据dout并通过HRDATA_RAM1送入总线进入主机ADAPT_BLOCK模块。当WRITE为高电平1时,可以将从TB中写入的DIN 写入RAM1中,从而完成对RAM1的写操作。在此次项目中主要是将1024个加数通
8、过DIN输入存储于该ADD1_RAM中。并将这1024个加数依次送入ADAPT_BLOCK 模块作为加数完成运算。图6上图中的WRITE是在TB中控制的,当WRITE为高时,将DIN输入到RAM1的MEMORY中,只到写入1024个数据以后,控制写操作的IN_VALID置低,此时,不再往里写数.3.2 ADD2_RAM模块:接口说明:PINI/ODISCRIBEHCLKI时钟信号,为所有总线提供时基。所有信号时序都和HCLK的上升沿相关。HRESETnI系统的复位信号低有效并用来复位系统和总线,这是唯一的低有效的信号。DINI从tb中输入,用于向ram2中输入数据。WRITEI从tb中输入,用
9、于控制ram2的写操作。HSEL_RAM2I用于选择RAM2进行读写操作的选择信号。HADDR31:0I从主机输出给从机的地址,用于选择相关地址。32位系统地址总线。HWRITEI从主机输出给从机的信号,用于指示是读操作还是写操作。当为高表示一个写操作,为低表示一个读操作。HTRANS1:0I表示当前传输的类型,可以是不连续,连续,空闲和忙。HSIZE2:0I表示传输的大小,典型情况是字节(8位),半字(16位),或者是字(32位)。协议允许最大的传输大小可以达到1024位。HBURST2:0I表示传输是否组成了突发的一部分,支持四个,八个或者16个节拍的突发传输并且突发传输可以是增量或者是回
10、环。HWDATA31:0I写数据总线用在写操作期间从主机到总线从机传输数据,建议最小的数据总线宽度为32位,然而,在要求高宽带运行时扩展(数据总线)还是很容易的。HREADY_RAM2O当HREADY为高时表示总线上的传输已经完成,在扩展传输时该信号可能会被拉低。HRESP_RAM21:0O传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY,ERROR,RETRY,SPLITHRDATA_RAM231:0O读数据总线用来在读操作期间从总线从机向总线主机传输数据,建议最小的数据总线宽度为32位,然而在要求高宽带运行时扩展(数据总线)还是很容易的。FULL_2O表示当前RAM已经写满(
11、2)接口框图:图7(3)逻辑图:图8由于自动生成的RAM8_1024的输入和输出的数据和地址与总线所要求的位数不匹配,故需要通过ADD1_RAM对生成的RAM8_1024进行操作,使其能够连接在总线上并完成读和写的操作。由上图可以看出当WRITE为高电平时,对RAM8_1024进行写操作,此时依次将DIN中的数据存储于RAM8_1024中,当WRITE为低电平时,读出haddr中的数据dout,并通过位拼接将24B0,dout作为hrdata_ram1送入总线,从而实现将RAM8_1024挂接在总线上实现读写功能。(4)内部详细设计:这个模块为ADD1_RAM模块,深度为1024,数据位宽为8
12、位。主要用于存储加数。通过tb来控制ADD1_RAM的写操作且从tb中输入数据进入ADD1_RAM。该模块对自动生成的ram模块进行例化。由于自动生成的ram模块没有读控制信号,其在地址addr输入以后会自动读出数据dout并通过HRDATA_RAM1送入总线进入主机ADAPT_BLOCK模块。当WRITE为高电平1时,可以将从TB中写入的DIN 写入RAM1中,从而完成对RAM1的写操作。在此次项目中主要是将1024个加数通过DIN输入存储于该ADD1_RAM中。并将这1024个加数依次送入ADAPT_BLOCK 模块作为加数完成运算。图9上图中的WRITE是在TB中控制的,当WRITE为高
13、时,将DIN输入到RAM2的MEMORY中,只到写入1024个数据以后,控制写操作的IN_VALID置低,此时,不再往里写数. 3.3 SUM_RAM模块:接口说明:PINI/ODISCRIBEHCLKI时钟信号,为所有总线提供时基。所有信号时序都和HCLK的上升沿相关。HRESETnI系统的复位信号低有效并用来复位系统和总线,这是唯一的低有效的信号。HSEL_SUMRAMI用于选择SUM_RAM进行读写操作的选择信号。HADDR31:0I从主机输出给从机的地址,用于选择相关地址。32位系统地址总线。HWRITEI从主机输出给从机的信号,用于指示读写操作。当为高表示一个写操作,为低表示一个读操
14、作。HTRANS1:0I表示当前传输的类型,可以是不连续,连续,空闲和忙。HSIZE2:0I表示传输的大小,典型情况是字节(8位),半字(16位),或者是字(32位)。协议允许最大的传输大小可以达到1024位。HBURST2:0I表示传输是否组成了突发的一部分,支持四个,八个或者16个节拍的突发传输并且突发传输可以是增量或者是回环。HWDATA31:0I写数据总线用在写操作期间从主机到总线从机传输数据,建议最小的数据总线宽度为32位,然而,在要求高宽带运行时扩展(数据总线)还是很容易的。HREADY_SUMRAMO当HREADY为高时表示总线上的传输已经完成,在扩展传输时该信号可能会被拉低。H
15、RESP_SUMRAM1:0O传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY,ERROR,RETRY,SPLITHRDATA_SUMRAM31:0O读数据总线用来在读操作期间从总线从机向总线主机传输数据,建议最小的数据总线宽度为32位,然而在要求高宽带运行时扩展(数据总线)还是很容易的。FULL_SUMRAMO表示当前RAM已经写满(2)接口框图:图10(3)逻辑框图:图11由于自动生成的RAM9_1024的输入和输出的数据和地址与总线所要求的位数不匹配,故需要通过SUM_RAM对生成的RAM9_1024进行操作,使其能够连接在总线上并完成读和写的操作。由上图可以看出当HWRI
16、TE,HSEL_SUMRAM,HREADY_SUMRAM为高电平时,WR为1,对RAM9_1024进行写操作,此时依次将HWDATA8:0中的数据存储于RAM9_1024中,当为WR低电平时,读出haddr中的数据dout,并通过位拼接将23B0,dout作为hrdata_sumram送入总线。故对SUM_RAM模块进行读写操作是由HWRITE来控制的,而HWRITE是由主机产生的,故对从机SUM_RAM的读写时通过主机来控制的。 (4)内部详细设计:这个模块为SUM_RAM模块,深度为1024,数据位宽为9位。主要用于存储数据。其中存储的数据是通过主机ADAPT模块实现RAM1及RAM2中的
17、数据相加的和。 图123.4 OUTPUT_BLOCK模块(1)接口说明:PINI/ODISCRIBEHCLKI时钟信号,为所有总线提供时基。所有信号时序都和HCLK的上升沿相关。HRESETnI系统的复位信号低有效并用来复位系统和总线,这是唯一的低有效的信号。HBUSREQ_OUTPUTIOUTPUT_BLOCK模块产生的请求占用总线的信号,送入仲裁器,让其作出判断。HGRANT_OUTPUTI授予信号由仲裁器产生并且表示相关主机是当前请求总线的主机中优先级最高的主机,优先考虑锁定传输。HADDR_ OUTPUT 31:0O32位系统地址总线。HWRITE_ OUTPUTO当为高表示一个写操
18、作,为低表示一个读操作。用于控制对从机的读写操作。HTRANS_ OUTPUT 1:0O表示当前传输的类型,可以是不连续,连续,空闲和忙。HSIZE_ OUTPUT 2:0O表示传输的大小,典型情况是字节(8位),半字(16位),或者是字(32位)。协议允许最大的传输大小可以达到1024位。HBURST_ OUTPUT 2:0O表示传输是否组成了突发的一部分,支持四个,八个或者16个节拍的突发传输并且突发传输可以是增量或者是回环。HWDATA_ OUTPUT 31:0O写数据总线用在写操作期间从主机到总线从机传输数据,建议最小的数据总线宽度为32位,然而,在要求高宽带运行时扩展(数据总线)还是
19、很容易的。HREADYI当HREADY为高时表示总线上的传输已经完成,在扩展传输时该信号可能会被拉低。HRESP1:0I传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY,ERROR,RETRY,SPLITHRDATA31:0I读数据总线用来在读操作期间从总线从机向总线主机传输数据,建议最小的数据总线宽度为32位,然而在要求高宽带运行时扩展(数据总线)还是很容易的。FULL_SUMIRAM_SUM的满信号,当SUM_RAM中满了,就可将其中的数据读出。OUT_DATAO输出的加法和数据OUT_VALIDO写操作时能信号,当其为高电平,可以将RAM_SUM中的数据读出。(2)接口框图
20、;图13(3)内部详细设计:图14上图为output_block模块的状态机,根据上图我们可以看出:当FULL_SUMRAM为高电平时READ_EN为高,此时output_block模块申请总线,当HGRANT_OUTPUT为高电平时,即仲裁器将总线权给OUTPUT_BLOCK模块,开始进入READ状态,之后一直处于READ状态,直到ADDR为32h800003ff,才进入IDLE状态。结束输出数据,放弃总线权。这样就可以实现连续输出1024个加法和。图15根据上图我们可以看出:当output_block模块进入read状态以后的下一个状态将产生的地址付给haddr_output,从而选定su
21、m_ram模块,又由于HWRITE为低电平,故对RAM_SUM进行读操作,将值通过dout读出并通过拼接23b0,dout传送入hrdata,最终读出里面的数据OUT_DATA;实现将sum_ram中的加法和连续输出。3.5 arbiter模块(1)接口说明:PINI/ODISCRIBEHCLKI时钟信号,为所有总线提供时基。所有信号时序都和HCLK的上升沿相关。HRESETnI系统的复位信号低有效并用来复位系统和总线,这是唯一的低有效的信号。HBUSREQ_ADAPTI主机请求访问总线的信号,表示主机adapt_block请求访问总线。HBUSREQ_OUTPUTI主机请求访问总线的信号,表
22、示主机output_block请求访问总线。HGRANT_ ADAPTO授予信号由仲裁器产生并且表示相关主机是当前请求总线的主机中优先级最高的主机,优先考虑锁定传输。HGRANT_ OUTPUTO授予信号由仲裁器产生并且表示相关主机是当前请求总线的主机中优先级最高的主机,优先考虑锁定传输。HADDR_ ADAPT 31:0I32位系统地址总线。由adapt_block模块产生的。从adapt_block模块输入。HADDR_ OUTPUT 31:0I32位系统地址总线。由output_block模块产生的。HADDR 31:0I32位系统地址总线。输出到总线上控制从机的读写地址。HWRITE_
23、 ADAPTI当为高表示一个写操作,为低表示一个读操作。用于控制对从机的读写操作。由adapt_block模块产生。HWRITE_ OUTPUTI当为高表示一个写操作,为低表示一个读操作。用于控制对从机的读写操作。由output_block模块产生。HWRITEO当为高表示一个写操作,为低表示一个读操作。用于控制对从机的读写操作。输出到总线上控制从机的读写。HTRANS_ ADAPT 1:0I表示当前传输的类型,可以是不连续,连续,空闲和忙。从adapt_block模块输入。HTRANS_ OUTPUT 1:0I表示当前传输的类型,可以是不连续,连续,空闲和忙。从output_block模块输
24、入。HTRANS1:0O表示当前传输的类型,可以是不连续,连续,空闲和忙。HSIZE_ ADAPT 2:0I表示传输的大小,典型情况是字节(8位),半字(16位),或者是字(32位)。协议允许最大的传输大小可以达到1024位。从adapt_block模块输入。HSIZE_ OUTPUT 2:0I表示传输的大小,典型情况是字节(8位),半字(16位),或者是字(32位)。协议允许最大的传输大小可以达到1024位。从output_block模块输入。HSIZE2:0O表示传输的大小,典型情况是字节(8位),半字(16位),或者是字(32位)。协议允许最大的传输大小可以达到1024位。HBURST_
25、 ADAPT 2:0I表示传输是否组成了突发的一部分,支持四个,八个或者16个节拍的突发传输并且突发传输可以是增量或者是回环。从adapt_block模块输入。HBURST_ OUTPUT 2:0I表示传输是否组成了突发的一部分,支持四个,八个或者16个节拍的突发传输并且突发传输可以是增量或者是回环。从output_block模块输入。HBURST2:0O表示传输是否组成了突发的一部分,支持四个,八个或者16个节拍的突发传输并且突发传输可以是增量或者是回环。输出给总线。HWDATA_ ADAPT 31:0I写数据总线用在写操作期间从主机到总线从机传输数据,建议最小的数据总线宽度为32位,然而,
26、在要求高宽带运行时扩展(数据总线)还是很容易的。从adapt_block模块输入。HWDATA_ OUTPUT 31:0I写数据总线用在写操作期间从主机到总线从机传输数据,建议最小的数据总线宽度为32位,然而,在要求高宽带运行时扩展(数据总线)还是很容易的。从output_block模块输入。HWDATA31:0O写数据总线用在写操作期间从主机到总线从机传输数据,建议最小的数据总线宽度为32位,然而,在要求高宽带运行时扩展(数据总线)还是很容易的。输出到总线。(2)接口框图:图16(3)逻辑框图:图17(4)内部详细设计:功能说明:仲裁器被用来确保任意时刻只有一个主机能够访问总线,仲裁器的功能
27、是检测许多不同的使用总线的请求和决定当前请求总线的主机中哪个的优先级最高。然后将优先级高的主机所产生的HADDR,HWRITE,以及HWDATA 放入总线。在此次项目中,由于当ADD1_RAM和ADD2_RAM都写满后,ADAPT_BLOCK 模块开始对其进行读操作,故此时要占用总线,此时我们根据实际情况规定ADAPT_BLOCK的优先级高,故ADAPT_BLOCK先占用总线,HGRANT_ADAPT先为高,当SUM_RAM模块写满以后,OUTPUT_BLOCK要求占用总线,此时又将总线权转交给OUTPUT_BLOCK模块。完成输出SUMRAM中的数据的操作。图18上图为总线移交的过程。我们可
28、以看出先是ADAPT_BLOCK 提出请求,仲裁器将总线权给了ADAPT_BLOCK模块,当ADAPT_BLOCK模块执行完毕,OUTPUT_BLOCK模块才开始占用总线。3.6 decoder模块(1)接口说明PINI/ODISCRIBEHCLKI时钟信号,为所有总线提供时基。所有信号时序都和HCLK的上升沿相关。HRESETnI系统的复位信号低有效并用来复位系统和总线,这是唯一的低有效的信号。HADDR31:0I从主机输出给从机的地址,用于选择相关地址。32位系统地址总线。HSEL_RAM1O用于选择SUM_RAM进行读写操作的选择信号。HSEL_RAM2O用于选择SUM_RAM进行读写操
29、作的选择信号。HSEL_SUMRAMO用于选择SUM_RAM进行读写操作的选择信号。HREADYO当HREADY为高时表示总线上的传输已经完成,在扩展传输时该信号可能会被拉低。HREADY_RAM1I当HREADY为高时表示总线上的传输已经完成,在扩展传输时该信号可能会被拉低。HREADY_RAM2I当HREADY为高时表示总线上的传输已经完成,在扩展传输时该信号可能会被拉低。HREADY_SUMRAMI当HREADY为高时表示总线上的传输已经完成,在扩展传输时该信号可能会被拉低。HRESP1:0O传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY,ERROR,RETRY,SPLI
30、THRESP_RAM11:0I传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY,ERROR,RETRY,SPLITHRESP_RAM21:0I传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY,ERROR,RETRY,SPLITHRESP_SUMRAM1:0I传输响应给传输状态提供了附加信息。提供四种不同的响应:OKEY,ERROR,RETRY,SPLITHRDATA_RAM131:0I读数据总线用来在读操作期间从总线从机向总线主机传输数据,建议最小的数据总线宽度为32位,然而在要求高宽带运行时扩展(数据总线)还是很容易的。HRDATA_RAM231:0I读数据总线用来在读操作期间从总线从机向总线主机传输数据,建议最小的数据总线宽度为32位,然而在要求
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1