硬件加速器设计(Sobel边缘检测)_第1页
硬件加速器设计(Sobel边缘检测)_第2页
硬件加速器设计(Sobel边缘检测)_第3页
硬件加速器设计(Sobel边缘检测)_第4页
硬件加速器设计(Sobel边缘检测)_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1硬件加速器的设计硬件加速器的设计(Verilog 1364-2001)(Verilog 1364-2001) - - 建模、仿真、综合、验证和实现建模、仿真、综合、验证和实现 - -23456 78步骤1步骤2步骤3寄存器寄存器寄存器图 流水线9 :设执行算法核心算法核心所占的时间比例为 f。则执行非算法核心算法核心的时间为(1- f ),因此有: t = ft + ( 1-f ) t t = ft/s + ( 1- f ) t 总体性能的提高比例是原来的处理时间除以加速后的处理时间: S= (ft+(1-f ) t) / ( ft/s+(1-f ) t ) = 1 / ( f/s+(1-f

2、 )这个公式称为Amdahl法则,是以Gene Amdahl的名字命名的,他是并行计算的先驱之一。这个公式表明加速处理核心核心(kernel)算法所带来的整体性能的提高在很大程度上依赖于算法核心算法核心在整个算法执行时间中所占的比例。 xyDDD22xyDDD22xyDDD22xyDDD22xyDDD10例例1:假设在嵌入式处理器上运行的算法可以分成不同的部分,执行每一部分所花费的时间可以估算出来,而该算法可分为两个部分,即分成两个核心核心(kernel)算法,一个占总时间的80%,而另一个只占总时间的20%。若用一个硬件加速器来加速算法核心算法核心,我们将第一个算法核心算法核心的运行速度提高

3、到原来的10倍,或者将第二个算法核心算法核心提高到原来的100倍,试问对哪个算法核心算法核心使用硬件加速器能对总体性能的提高产生更好的效果?解:对第一个算法核心算法核心进行加速处理所带来的总体性能提升为: 1 / (0.8/10)+(1-0.8) = 1/(0.08+0.2) =3.57 对第二个算法核心算法核心进行加速处理带来的总体性能提升为: 1 / (0.2/10)+(1-0.2) = 1/(0.02+0.8) =1.25xyDDD22xyDDD22xyDDD22xyDDD22xyDDD11从结果对比可以看到,虽然第二个算法核心算法核心提高的运算速度是第一个的10倍,但是由于它在原来总运

4、行时间里所占的比例较低,对其进行加速处理也只能带来较小的性能改善。而对第一个算法核心算法核心进行加速处理会对总体性能产生更显著的效果。所以我们在开始正式设计硬件时必须找到主要矛盾,即占总运行时间比例较高的部分,针对这部分算法程序进行硬件加速器的设计 ,以期望取得显著效果。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD12在确定算法核心算法核心以后,我们需要确定执行计算步骤的顺序。我们要确保能得到数据,以便按顺序处理,并且确保中间结果能够在后续步骤需要前计算出来。除了这些约束以外,有些运算步骤是可以潜在地并行执行的。因此,我们要确定哪些步骤可以通过并行执行来满足性能要求。然后

5、再确定加速器的结构,即确定各个处理模块的功能以及它们之间的数据流动。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD13从算法到加速器结构,是在系统设计流程的早期完成的。这通常是由有经验的系统设计师完成。让综合工具自动完成这一过程,面临很大的技术挑战。除了非常少的领域外,早期的高级综合工具并不成功。近来,新一代工具开始浮现,并且在很广泛的领域内表现出良好的前景,尤其在音频,视频,和其它的信号处理领域。随着这种技术的成熟,我们可以期待高级综合工具在设计方法学中将会有更广泛的应用。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD14在许多嵌入式系统中,需要处理大

6、量的输入输出数据。I/O控制器必须在外部设备和嵌入式系统之间高速传输数据。数据从外部设备读入内存,就可以被嵌入式软件或加速器处理。处理后的数据被写到内存。如果读写内存数据都在处理器的控制下进行,那么,数据传输速度会很慢,并且占用大量处理器时间,使处理器无法执行其他任务。如果让I/O控制器和加速器直接发起对内存的访问而不通过处理器,势必可以大大加快访问内存的速度。这种内存访问方式称为DMA(Direct Memory Access)方式。在这种方式下,I/O控制器和加速器作为主设备给出读写内存的地址和控制信号,或者通过DMA控制器发起对内存的访问,由DMA控制器给出地址和控制信号。xyDDD22

7、xyDDD22xyDDD22xyDDD22xyDDD15系统中有处理器和DMA设备,并且共用内存访问通路,必须避免由于多个主设备同时访问内存而引起的冲突。为此,我们可以在系统中引入仲裁器(Arbiter),如下图所示。系统中的主设备(处理器,DMA方式的加速器、I/O控制器)在访问内存之前,必须给仲裁器发出请求信号,仲裁器根据预先确定的仲裁策略,在多个请求信号中决定谁将取得访问内存的总线控制权,并给得到总线控制权的设备发出访问内存的准许信号。当该设备完成对内存的访问后,便撤消请求信号。然后,仲裁器进入新一轮的仲裁,仲裁胜出的设备进行内存访问。我们也可以让处理器来执行仲裁器的功能。当其他主设备要

8、访问内存时,必须先向处理器发出请求信号,由该处理器决定哪个设备可以访问内存。根据不同的应用场合,选择适合的仲裁策略,有优先级模式(赋予某个或几个设备更高的优先权),轮询模式(所有主设备严格按照一定的顺序取得内存访问权)。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD16 xyDDD22xyDDD22xyDDD22xyDDD22xyDDD CPU 加速器加速器 仲裁器仲裁器 存储器存储器图2 多主设备共享内存系统 I/O控制器控制器request grant grant requestrequest grant17在许多应用中,数据被有规律地放在内存中如占用连续的内存块,加速

9、器把数据从内存中一块一块取出进行处理。例如处理静态和视频图像的几种算法把一帧图像分割成88或者1616的像素块,然后独立地处理每个块。这种块处理加速器的数据通路主要由两部分组成。其中一个部分以DMA方式访问内存。这部分电路根据处理器写入加速器内部寄存器的基地址产生后续地址。这一功能通常由地址计数器来完成。数据通路的另一部分对数据进行处理。控制部分按一定的时序控制数据通路的打开和关闭,使数据有序、正确地流动。控制功能可以用一个有限状态机或多个状态机实现。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD18与块处理加速器相对应的是流处理加速器。流处理加速器处理的数据是按时间顺序达

10、到的数据流。数据流可以是来自于高速的输入设备(如A/D、摄像机等),也可以是其他加速器的输出。此外,内存中的数据也能以流的方式读出,供加速器处理。流处理加速器最常见的应用领域之一是数字信号处理数字信号处理(DSP)。模拟信号经A/D采样后,得到采样信号的数据流。对数据的处理包括滤波、混合、放大/衰减、以及时域和频域间的转换。 xyDDD22xyDDD22xyDDD22xyDDD22xyDDD19虽然,加速器可以直接读取内存数据,并且把数据处理完后写回内存,但是加速器必须知道什么时候开始工作,待处理数据的起始地址,数据的大小,处理后数据的存放地址以及完成处理后通知处理器。也就是说,处理器必须能够

11、控制加速器的工作、获取加速器当前的工作状态。这些功能通常是由加速器内部的输入输出寄存器来完成。 xyDDD22xyDDD22xyDDD22xyDDD22xyDDD20 我们可以在加速器内部设置地址寄存器和数据长度寄存器,处理器通过向这些寄存器写入数据让加速器知道从何处读取数据、数据大小及处理完后数据写到何处。还可以有状态寄存器,处理器通过读取状态寄存器了解加速器当前的状态。也可以用状态寄存器的值产生申请中断信号,通知处理器。加速器可以看做是处理器的一个I/O设备,因此,处理器读写加速器的内部寄存器与读写一般的I/O设备是一样的。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD

12、21有的情况下,当处理器给加速器发出一个处理任务时,并不要求加速器立即响应。处理器把需要加速器处理的多项任务的描述信息写到先入先出队列(FIFO)中,加速器从FIFO中读取每件任务的描述信息,等准备好以后,就可以执行一项任务。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD22 23边缘检测是分析视频图像的重要手段之一,并且应用领域广泛,像安全监控和计算机图形学等。边缘检测是确定一幅图像在哪些区域上亮度发生突变。这些亮度突变的区域通常就是物体的边缘。24在这个例子中,我们假设有像素的图像,每个像素用8比特表示,按行存储在内存中,并且每一行里从左到右连续的像素点占据着内存中连续

13、的存贮单元。像素值是无符号整数,范围从0(黑色)到 255(白色)。这里,我们采用一种相对简单的算法,叫做Sobel边缘检测法。它的机理是计算x和y方向亮度信号的导数值并且寻找导数中的最大值和最小值。这些区域就是亮度变化最剧烈的区域。 25Sobel检测法通过一个叫做卷积的过程来估计每个像素点每个方向上的导数值。把中心像素点和离它最近的八个像素点每个乘以一个系数后相加。该系数通常用一个 的卷积表(convolution mask)来表示。分别用于计算x和y方向导数值的Sobel卷积表 Gx和 Gy 如下图所示。22xyDDD26-10+1-20+2-10+1+1+2+1000-1-2-127我

14、们把每个像素值分别乘以卷积表中对应的系数,再把相乘得到的九个数相加就得到了x方向和y方向的偏导数值 Dx和 Dy。然后,利用这两个偏导数值计算中心像素点的导数。计算公式如下:22xyDDD28由于我们只想找到导数幅值的最大值和最小值,对上式作如下简化:这样近似能够满足计算要求,因为开平方和平方函数都是单调的,实际计算幅度的最大值、最小值与近似以后计算的最大值、最小值发生在图像的同一个地方。并且,与计算平方和开平方相比,计算绝对值所用的硬件资源少得多。xyDDD29我们需要重复地计算图像中每个像素位置的导数幅值。但是,注意到环绕图像边缘的像素点并没有一个完整的相邻像素组来计算偏导数和导数,所以我

15、们需要对这些像素进行单独处理。最简单的方法就是把图像中边缘像素点的导数值值 |D|设置为0。这可以通过软件来完成。30例例2:把Sobel边缘检测算法用伪代码的形式表达出来,也就是,用一种与计算机编程语言类似的表示法。我们用类似于Verilog的伪代码来表示该算法。令Orowcol 表示原始图像的像素点,Drowcol表示导数图像的像素点,row的范围从0到479,col的范围从0到639。同时令Gxij 和 Gyij 表示卷积表,其中i 和 j 的范围从 -1 到 1. 31该算法可以表达为如下形式: for( row=1; row=478; row=row+1 ) begin for(co

16、l=1; col=638; col=col+1)begin sumx=0; sumy=0;for( i = -1; i = +1; i = i+1) beginfor (j = -1; j= +1; j = j+1) beginsumx = sumx + Orow+icol+j * Gxij;sumy = sumy + Orow+icol+j * Gyij; end end Drowcol = abs(sumx) + abs(sumy) end end3233 3435 36 计算导数像素的数据关系图37383940414243 444546图6 Sobel加速器数据通路结构4748 4950

17、515253545556575859606162636465666768697071表1 Sobel加速器的寄存器寄存器偏移值读/写中断控制0只写开始4只写原始图像基地址8只写导数图像基地址12只写状态0只读727374757677 787980818283848586878889909192 939495为了完成这个验证过程,必须构建一个测试平台,该平台可以模拟带有加速器的嵌入式系统的行为。若我们有一个已验证的嵌入式处理器模型,则可以把它加到测试平台中,编写小的测试程序在它上面运行。测试程序把参数写入加速器中的寄存器,对其进行设置并启动操作。另一方面,若不能获得处理器模型,则必须编写处理器总

18、线的功能模型,即能执行预先确定的总线操作时序,但不实际执行任何处理器指令的模型。我们的测试平台也需要有存储器和总线仲裁器的模型。这个存储器模型,像处理器模型一样,没有必要具有全部的功能,而只要具有总线的读写操作功能即可,只要能按照预先确定的规则产生读取的数据,可以不考虑数据的写入。这些简化使得我们可以把精力集中在加速器的验证上,以可控的方式建立测试案例。96例例14 :开发一个可对 Sobel 加速器进行验证的测试平台,该平台包含一个具有总线功能的处理器模型。该处理器模型能通过程序命令加速器对一幅存储在地址为00800016 的原始图像进行计算,并把计算生成的图像像素的导数值存入地址为0530

19、0016 的内存中。该处理器模型必须每10s读一次状态寄存器,直到done 标志位标志位(完成标志位)被设置为止。该测试平台还必须包括能赋予加速器优先权的总线仲裁器,以及具有总线功能的存储器,该存储器对读操作返回0,并抛弃写入的数据。979899100always begin/ 时钟发生器clk = 1b1; #(t_c/2);clk = 1b0; #(t_c/2); endinitial begin / 复位发生器rst = 1b1;#(2.5*t_c) rst = 1b0;end sobel duv ( .clk_i(clk), .rst_i(rst), .cyc_o(sobel_cyc_

20、o),.stb_o(sobel_stb_o), .we_o (sobel_we_o), .adr_o(sobel_adr_o),.ack_i(sobel_ack_i), .cyc_i(bus_cyc), .stb_i(sobel_stb_i), .we_i(bus_we), .adr_i(bus_adr3:2), .ack_o(sobel_ack_o), .dat_o(sobel_dat_o), .dat_i(bus_dat), .int_req(int_req) ); endmodule101时钟发生器always块用参数t_c确定了时钟周期时间,产生频率为100MHz的时钟信号。参数mem

21、_base和sobel_base定义了存储器的基地址(00000016 )和Sobel加速器寄存器的基地址(40000016)。其他参数定义了控制寄存器和状态寄存器相对基地址的偏移值。接下去,测试平台列出了表示总线地址,数据和控制信号的wire类型的线网。正如我们马上将要看到的那样,这些wire类型的线网信号是从系统中不同的源设备经由多路器选择出来的。该测试平台还声明了专用于连接Sobel加速器的线网。在模块中,加速器被实例引用为待验证的设计(duv)并与该线网连接。 102103104105 106107存储器总线功能模型的测试平台代码如下:wire mem_stb_i;wire 3:0me

22、m_sel_i;reg mem_ack_o;reg 31:0mem_dat_o;always begin / 存储器总线功能模型 mem_ack_o = 1b0;mem_dat_o = 3h00000000;(posedge clk);while (!(bus_cyc & mem_stb_i) (posedge clk);if (!bus_we)mem_dat_o = 32h00000000; / 代替读取的数据 mem_ack_o = 1b1;(posedge clk);end108存储器一直等待,直到信号bus_cyc 和mem_stb_i都为1,这表示需要进行存储器操作。若bus_we为

23、0,则进行读取操作,故从存储器的输出读取的数据为0。在写操作的情况下,存储器不对输入数据进行任何操作。在这两种情况下,存储器都把确认信号设置为1,在下一个周期随即把这个信号清零,完成操作。109测试平台仲裁器在某种程度上比测试平台的其它器件要复杂些。它把信号sobel_cyc_o 和cpu_cyc_o分别用作Sobel加速器和处理器的请求信号,并产生sobel_gnt和cpu_gnt作为批准批准(grant)信号。当任一请求信号变成有效时,仲裁器便发出相应的批准信号。若两个请求信号在同一个周期变成有效,则仲裁器授予加速器优先权,发出加速器的批准批准信号,而不发出处理器的批准批准信号直到加速器的

24、请求被撤销为止。因为批准信号输出不仅仅取决于请求信号的输入值,还取决于请求信号值的以前历史情况。仲裁器必须由时序电路采用有限状态机来实现。状态转移图如图11所示。该有限状态机是一个米利型状态机,因为它允许在相应的请求信号变为有效的同一个周期就发出批准批准信号。 110图11仲裁器状态转移图111仲裁器的测试平台代码如下:parameter sobel = 1b0, cpu =1b1;reg arbiter_current_state, arbiter_next_state;reg sobel_gnt, cpu_gnt;/ 仲裁器有限状态机寄存器 always (posedge clk) if

25、(rst)arbiter_current_state = sobel;elsearbiter_current_state = arbiter_next_state; 112 always * / 仲裁器逻辑case (arbiter_current_state) sobel: if (sobel_cyc_o) begin sobel_gnt = 1b1; cpu_gnt = 1b0; arbiter_next_state = sobel; end else if (!sobel_cyc_o & cpu_cyc_o) begin sobel_gnt = 1b0; cpu_gnt = 1b1; a

26、rbiter_next_state = cpu; end else begin sobel_gnt = 1b0; cpu_gnt = 1b0; arbiter_next_state = sobel; end 113 cpu: if (cpu_cyc_o) begin sobel_gnt = 1b0; cpu_gnt = 1b1; arbiter_next_state = cpu; end else if (sobel_cyc_o & !cpu_cyc_o) begin sobel_gnt = 1b1; cpu_gnt = 1b0; arbiter_next_state = sobel; end

27、 else begin sobel_gnt = 1b0; cpu_gnt = 1b0; arbiter_next_state = sobel; endendcase114测试平台代码剩下的部分表示总线多路选择器和从机选择逻辑:wiresobel_sel, mem_sel;assign bus_cyc = sobel_gnt ? sobel_cyc_o : cpu_cyc_o;assign bus_stb = sobel_gnt ? sobel_stb_o : cpu_stb_o;assign bus_we = sobel_gnt ? sobel_we_o : cpu_we_o;assign b

28、us_sel = sobel_gnt ? 4b1111 : cpu_sel_o;assign bus_adr = sobel_gnt ? 1b0, sobel_adr_o:cpu_adr_o;assign sobel_ack_i = bus_ack & sobel_gnt;assign cpu_ack_i = bus_ack & cpu_gnt;115 / 总线从机逻辑 assign sobel_sel = (bus_adr & 23h7FFFF0) = sobel_reg_base;assign mem_sel= (bus_adr & 23h400000) = mem_base;assign

29、 sobel_stb_i = bus_stb & sobel_sel;assign mem_stb_i = bus_stb & mem_sel;assignbus_ack = sobel_sel ? sobel_ack_o : mem_sel ? mem_ack_o : 1b0;/ 总线数据多路选择器assign bus_dat = (sobel_gnt & bus_we | sobel_sel & !bus_we) ? sobel_dat_o : (cpu_gnt & bus_we) ? cpu_dat_o : mem_dat_o;116来自仲裁器的批准信号确定由哪个主设备提供总线控制信号和

30、地址信号。仲裁器的批准批准(grant)信号也被用来选择哪一个主机接收从机的确认信号,这样只有取得总线使用权的主机主机才能接收到从机的确认信号。总线从机从机逻辑对地址进行译码得到设备的片选信号。被选中的从机从机(片选信号有效)利用其片选信号把确认确认(ack)信号经由多路器送到bus_ack信号上。总线数据多路器根据哪个主机主机是有效的,哪个从机从机被选中,总线操作是读还是写,来确定bus_data信号的数据源。117我们将利用例14的测试平台进行仿真,以验证Sobel加速器正确地响应了从机总线操作,并在正确的地址上执行了主机总线操作。我们必须观察总线的控制信号和地址信号的值,以及加速器内部信号的值。图12显示了由处理器总线功能模块对加速器进行初始化的过程中总线信号的仿真波形。图13到15显示了加速器内部信号在处理一行开始时的波形(图13),在稳态处理过程中的波形(图14),和在处理一行结束时和下一行开始时的波形(图15)。最后,图16展示了整幅图像处理完成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论