Download presentation
Presentation is loading. Please wait.
1
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库 14.5 Storage库
2
14.1 总线控制库 AltBus模块 AltBus模块可以将浮点Simulink总线变成定点类型的总线。可以将AltBus插进一个数据或I/O口通道,从而产生输入和输出端口。
3
当把一个信号变为定点类型时,必须设定其位宽。确定特定的位宽,可以通过多种方式来实现,如对结果进行截位、补位或含低位的方法实现。如果选择含低位或补位的方法,就必须在电路中插入合适的逻辑电路,这都是AltBus 模块的工作。表14-1是AltBus 模块的参数设定表。
4
表14-1 AltBus模块的参数说明 名 称 数值和选项 说 明 Node Type Internal Node, Input Port
名 称 数值和选项 说 明 Node Type Internal Node, Input Port Output Port, Constant Black Box Input,Black Box Output 设定信号节点的类型 Bus type Signed Integer Signed Fractional Unsigned Integer或Single Bit 选择总线的数据格式 [number of bits].[ ] 1~51 设定小数点左边的位数,包括符号位。此参数不适用于1位的总线
5
[ ].[number of bits] 0~51 设定小数点右边的位数。此参数只适用于有符号小数总线 Saturate On或Off 如果选择“On”,当输出大于有待表达的最大的正值或负值,则该输出即扩位到此最大的正值或负值。若此选项取为“Off”,则最高位MSB被截去。此选项对输入端口或常数节点类型是无效的
6
名 称 数值和选项 说 明 Round On或Off 若此项选择“On”,则输出略去了所有高位的0位;若选为“Off”,则最低位LSB被截去。此选项不适用于输入和常数类型 Bypass Bus Format 此项为“On”时表示在Simulink中使用浮点数进行仿真 Constant Value Double 表示用设定的总线参数规范常数
7
在Simulink设计中,以下模式可使用AltBus 模块:
(1) AltBus Input Port & Output Port Modes; (2) AltBus Internal Node Mode; (3) AltBus Black Box Input Output Mode; (4) AltBus Constant Mode。 下面将对这些模式分别给予说明。
8
1. AltBus输入/输出端口模式 输入端口和输出端口模式(AltBus Input Port & Output Port Modes)主要用于定义硬件实现的接口,以及将浮点Simulink信号(来自基本Simulink模块)转化成有符号二进制小数类型(用于为DSP Builder模块提供数据)。 表14-2和图14-1显示了浮点数(4/3 = 1.333)是如何转变成有3个不同小数点位置的SBF格式的数据的。
9
表14-2 浮点数与SBF格式数据的转换 总线下标 输 入 Simulink VHDL [ 4 ] . [ 1 ] 4/3 1.00
输 入 Simulink VHDL [ 4 ] . [ 1 ] 4/3 1.00 2.00 [ 2 ] . [ 3 ] 1.25 10.00 [ 1 ] . [ 4 ] -11.00
10
2. AltBus内部节点模式 AltBus内部节点模式(AltBus Internal Node Mode)用来将一种SBF格式的Simulink信号转变成另一种格式的信号,或用来定义内部节点的总线宽度。这种内部节点可以在硬件中实现。图14-2给出了内部节点模式以及输入端口模式的AltBus的用法。在此例中,具有([ 10 ] . [10 ])SBF格式的20位总线被转变成了具有([ 2 ] . [2 ])SBF格式的4位总线。
11
在VHDL中,这种算法操作导致从20位总线(AltBus(19 DOWN TO 0))截为4位总线(AltBus(3 DOWN TO 0)),即
12
图14-1 Alt Bus模块应用示例
13
图14-2 内部节点模式实例
14
3. AltBus黑盒子输入/输出模式 AltBus黑盒子输入/输出模式(AltBus Black Box Input Output Mode)是用来进行层次化设计的。如果不希望SignalCompiler将子层次的设计转化为VHDL语言,而只是在VHDL中以顶层文件出现,就可以使用此模式。因此,当Simulink设计中具有不同的VHDL模块是十分有用的,这时应注意,VHDL模块的端口引脚名必须与Simulink模块中的引脚名相一致。 图14-3对Black Box Input Output模式作了说明。
15
4. AltBus常数模式 当一个总线或一个位线设置成一个常数值时就可以使用这种模式(AltBus Constant Mode)。 SignalCompiler将这种常数值转化成VHDL中的STD_LOGIC或STD_LOGIC_ VECTOR。 在综合中,综合器会大大降低有常数信号输入的逻辑电路的资源耗用。
16
图14-3 Black Box Input Output模式说明
17
输入/输出常数模块 输入/输出常数模块是由AltBus模块产生的。这些模块只具有AltBus输入、输出和常数功能的部分功能。表14-3是该模块的输入参数表,表14-4是该模块的输出参数表。
18
表14-3 输入模块参数说明 名 称 数值 说 明 Bus type Signed Integer, Signed Fractional
表14-3 输入模块参数说明 名 称 数值 说 明 Bus type Signed Integer, Signed Fractional Unsigned Integer或Single Bit 选择总线的数值格式 [number of bits].[ ] 1~51 设置小数点左边的位数,包括符号位。此参数不适用于1位的总线 [ ].[number of bits] 0~51 设置小数点右边的位数。此参数只适用于有符号小数总线
19
表14-4 输出模块参数说明 名 称 数 值 说 明 Bus type Signed Integer, Signed Fractional
表14-4 输出模块参数说明 名 称 数 值 说 明 Bus type Signed Integer, Signed Fractional Unsigned Integer或Single Bit 选择总线的数值格式 [number of bits].[ ] 1~51 设定小数点左边的位数,包括符号位。此参数不适用于1位的总线 [ ].[number of bits] 0~51 设定小数点右边的位数。此参数只适用于有符号小数总线 Saturate On或Off 如果选择“On”,若输出大于有待表达的最大的正值或负值,则此输出即扩位到该最大的正值或负值;若此选项取为“Off”,则最高位MSB被截去。此选项对输入端口或常数节点类型是无效的
20
名 称 数 值 说 明 Round On或Off 若此项选择“On”,则输出略去了所有高位的0位;若选为“Off”,则最低位LSB被截去。此选项不适用于输入和常数类型
21
小数点确定模块 当二进制数小数点模块移动到输入总线小数点位置后,输出位宽仍保持与输入位宽一致。 图14-4显示了使用Binary Point Casting模块的设计实例。表14-5是Binary Point Casting参数表。
22
图14-4 Binary Point Casting设计示例
23
表14-5 Binary Point Casting模块参数说明
名 称 数 值 说 明 Bus type Signed Integer, Signed Fractional Unsigned Integer或Single Bit 选择总线的数值格式 [number of bits].[ ] 1~51 设定小数点左边的位数,包括符号位。此参数不适用于1位的总线 [ ].[number of bits] 0~51 设定小数点右边的位数。此参数只适用于有符号小数总线 Output Binary Point Position 规定输出信号小数点的位置
24
BusBuild模块 BusBuild 模块用于构建由单个二进制数位输入的总线。输出总线是以有符号二进制小数的表达方式定义的。使用此模块可根据需要确定总线的数据类型及小数点两边的位数。 BusBuild模块和ExtractBit模块最常见的是用于布尔(Boolean)数据类型的算术操作。BusBuild对应于VHDL的RTL电路只是一条信号线。 图14-5是使用BusBuild模块的一个实例。
25
图14-5 BusBuild 模块使用实例
26
表14-6是此模块的参数表。 表14-6 Bus Build模块参数说明 名 称 数 值 说 明 Bus Type
名 称 数 值 说 明 Bus Type Signed Integer, Signed Fractional Unsigned Integer 选择总线的数值格式 Output [number of bits].[ ] 1~51 设定小数点左边的位数,包括符 号位 Output [ ].[number of bits] 0~51 设定小数点右边的位数。此参数只适用于有符号二进制小数的总线
27
Bus Concatenation模块 总线合并模块(Bus Concatenation Block)的功能是将两条总线A和B合并起来,其结果的位宽是A+B的位宽,其中总线A放在输出总线高位(MSB),B是在输出总线的低位。 表14-7是此模块的参数表。
28
表14-7 Bus Concatenation模块参数说明
名 称 数 值 说 明 Bus A Width 1~51 输入待合并的第1条总线的宽度 输入待合并的第2条总线的宽度 Output is Signed On或Off 选择输出总线是否是有符号的
29
Bus Conversion模块 总线类型转换(Bus Conversion)模块的功能是将一种节点数据类型的总线向另一种类型转换。 表14-8是此种模块的参数表。
30
表14-8 Bus Conversion模块参数设置说明
名 称 数 值 说 明 Input Bus Type Signed Integer, Signed Fractional, Unsigned Integer 选择用于仿真和转换成VHDL的输入总线类型 Input [number of bits].[ ] 1~51 选择小数点以左的二进制位数,包括符号位 Input [ ].[ number of bits] 0~51 选择小数点以右的二进制位数。注意,这项选择只有在选了“Signed Fractional”后才存在
31
Output Bus Type Signed Integer, Signed Fractional, Unsigned Integer, 选择用于仿真和转换成VHDL的输入总线类型 Output [number of bits].[ ] 1~51 设定小数点左边的位数 Output [ ].[number of bits] 0~51 设定小数点以右的二进制位数。注意,这项选择只有在选了“Signed Fractional”后才存在 Input Bit Connected to Output MSB 设定使用总线中的哪一段。此参数指示出这段总线的起始位(LSB) Input Bit Connected to Output LSM 设定使用总线中的哪一段。此参数指示出这段总线的结束位(MSB) Round On或Off 选择是否略去0位 Saturate 选择是否扩位
32
图14-6 Bus Conversion模块的使用示例
33
Extract Bit模块 位提取模块(Extract Bit Block)的功能是读取有符号二进制小数数据类型的Simulink总线,输出以Extracted Bit参数设定的总线位。表14-9给出了此模块的参数说明。图14-7是使用Extract Bit模块的示例。
34
图14-7 Extract Bit模块使用示例
35
表14-9 Extract Bit模块参数说明 名 称 数 值 说 明 Input [number of bits].[ ] 1~51
名 称 数 值 说 明 Input [number of bits].[ ] 1~51 设定小数点左边的位数,包括符号位 Input [ ].[ number of bits] 0~51 设定小数点右边的位数 Extracted Bit 0~32 设定提取哪一个位
36
复数信号库 与Simulink相同,DSP Builder也支持复数信号类型。使用复数可以简化许多诸如实用系统的设计、FFT、I-Q调整、复数滤波器等运算操作。若将DSP Builder模块与复数信号库(Complex Signals Library)中的模块相连(例如将AltBus与复数AddSub相连),就必须在两个连接模块间使用Real-Imag to Complex模块或Complex to Real-Imag模块。
37
Butterfly 算子模块 Butterfly Operator模块主要是对复数有符号整数作如下算术操作: A = a + b w B = a - b w 其中a,b,w,A和B是有符号整数类型的复数,即 a = x + j X b = y + j Y w = v + j V
38
A = ( x + y v ) – Y V + j (X + Y v + y V )
B = ( x + y v ) + Y V + j (X – Y v – y V ) 此函数是以最大位宽精度来进行运算并操作的。A和B的最大位宽精度是 2 [ 输入位宽 ] + 2
39
用于输出端口的A和B的位宽是用输出位宽与输出LSM位参数来规定的,例如,若输入位宽是16,输出位宽也是16,而输出LSB位宽是4,则最大位宽精度就是34位,而输出端口就可表示为
表14-10是Butterfly算子模块参数表。 图14-8是Butterfly算子模块应用示例。
40
表14-10 Butterfly算子模块参数说明 名 称 数 值 说 明 Input Bit Width ( a, b, W ) 4~51
名 称 数 值 说 明 Input Bit Width ( a, b, W ) 4~51 规定复数有符号整数输入信号a, b, w的位宽 Input Bit Width ( A and B ) 规定复数有符号整数输出信号A,B的位宽 Output LSB Bit 规定最大位宽精度的输出LSB位宽
41
图14-8 Butterfly算子模块应用示例
42
复数加减模块 复数加减模块(Complex Add Sub Block )的功能是将两个标量复数输入相加或相减后输出,图14-9是此模块的应用示例。 表14-11是Complex Add Sub模块的参数表。
43
图14-9 Complex Add Sub 和Complex Product模块应用示例
44
表14-11 复数加减模块参数说明 名 称 选 项 说 明 Arithmetic Operation Add 或Subtract
表 复数加减模块参数说明 名 称 选 项 说 明 Arithmetic Operation Add 或Subtract 选择进行何种算术操作:加或减
45
复数乘积模块 复数乘积模块(Complex Product Block)的功能是将两个标量复数输入相乘后输出。表14-12是此模块的参数表。图14-9中有此模块的应用示例。 表 复数乘积模块参数说明 名 称 选 项 说 明 Arithmetic Operation Multiply 选择操作的方式
46
复数共轭模块(Complex Conjugate Block)的功能是对输入的标量复数取共轭或取反后输出。表14-13是此模块的参数表。
复数共轭模块 复数共轭模块(Complex Conjugate Block)的功能是对输入的标量复数取共轭或取反后输出。表14-13是此模块的参数表。 图14-10是此模块的应用示例。 表 复数共轭模块参数说明 名 称 选 项 说 明 Operation Conjugate Inverse 选择操作方式, 取共轭或取反
47
图14-10 Complex Conjugate Block应用示例
48
复数与Real-Imag间的连接模块 这种模块有两类,即Complex to Real-Imag模块和Real-Imag to Complex模块。 1. Complex to Real-Imag模块 Complex to Real-Imag模块的功能是将一复数输入构建成一个定点实部和定点虚部函数并输出。表14-14是此模块的参数表。 图14-11是Complex to Real-Imag模块的应用示例。
49
表14-14 Complex to Real-Imag模块参数说明
名 称 数值和选项 说 明 Bus type Signed Integer,Signed Fractional Unsigned Integer或Single Bit 选择用于总线的数据格式 Inputs [number of bits].[ ] 1~51 选择小数点以左的二进制位数,包括符号位 Inputs [ ].[ number of bits] 0~51 选择小数点以右的二进制位数。注意,这项选择只有在选了“Signed Fractional”后才存在
50
图14-11 Complex to Real-Imag模块应用示例
51
2. Real-Imag to Complex 模块
52
表14-15 Real-Imag to Complex 模块参数说明
名 称 数值和选项 说 明 Bus type Signed Integer, Signed Fractional Unsigned Integer,或Single Bit 选择用于总线的数据格式 Inputs [number of bits].[ ] 1~51 选择小数点以左的二进制位数,包括符号位 Inputs [ ].[ number of bits] 0~51 选择小数点以右的二进制位数。注意,这项选择只有在选了“Signed Fractional”后才存在
53
复数多路选择器模块 复数多路选择器模块(Complex Multiplexer Block)是一个2选1的多路选择器,其选控线是一个非复数线。 复数延迟模块 复数延迟模块 (Complex Delay Block)可以按照Depth参数设定的延迟量对通过的数据进行延迟。注意,其输入必须是复数值。表14-16是此模块的参数表。
54
表 复数延迟模块参数说明 名 称 设 定 说 明 Depth User Defined 设定此模块的延时长度
55
复数常数模块 复数常数模块只输出定点复数常数值。表14-17是此模块的参数表。
56
表14-17 复数常数模块的参数说明 名 称 数值和选项 说 明 Bus type
表 复数常数模块的参数说明 名 称 数值和选项 说 明 Bus type Signed Integer, Signed Fractional Unsigned Integer,或Single Bit 选择用于总线的数据格式 [number of bits].[ ] 1~51 设置小数点左边的位数,包括符号位。此参数不适用于1个位的总线 [ ].[number of bits] 0~51 设置小数点右边的位数。此参数只适用于有符号小数总线 Real Value User Defined 设置常数实部的数值 Imaginary Value 设置常数虚部的数值
57
14.3 Gates 库 Case语句模块 Case语句模块的功能是把输入信号(这信号的类型必须是有符号或无符号整数)与一组事件数值作比较,而对每一事件数值产生一个一位的二进制输出。比较事件的数量没有限制。在每个事件表述后加逗号。此外,还可以对每一事件设定多组条件,多种条件间可以用竖线来分隔。
58
例如,对于有4个事件的情况,其中第1个事件有两个条件1和2,则在“Case Values”栏中可以这样填号:1 | 2,3,4,5。表14-18是Case语句模块的参数表。
名 称 选 项 说 明 Default Case On 或 Off 如果选“On”,则此默认输出为高电平,其它输出都是低电平 Case Values User Specified 设定需要与输入信号比较的值,包括每一值后的逗号
59
图14-12是Case 语句模块的应用示例。例14-1是SignalCompiler从图14-12所示电路生成的VHDL的Case 语句程序段。
60
图 Case 语句模块的应用示例
61
【例14-1】Case语句程序段。 PO: Process ( AIW ) Begin Case A1W IS When "000001" "000010""000011" => A0W <= '1' ; A2W <= '0' ; A6W <= '0' ; A5W <= '0' ; A4W <= '0' ; A3W <= '0' ;
62
When "000100"=> A0W <= '0' ; A2W <= '1' ; A6W <= '0' ; A5W <= '0' ; A4W <= '0' ; A3W <= '0' ; When "001000""001001""001010" "001011" => A0W <= '0' ; A2W <= '0' ; A4W <= '1' ; A3W <= '0' ; When other => A4W <= '0' ; A3W <= '1' ;
63
end case ; end process ; 注意:在Simulink中,每一条线都是以A<数值>W来命名的。其中<数值>是自动产生的。
64
IF语句模块 IF语句根据IF条件方式返还一布尔类型结果true或false。其中比较条件方程的输入量a, b, c, d, e, f, g, h, I或j都必须是有符号或无符号整数。条件方程中可以使用任何数量的括号。表14-19是IF语句支持的操作符,表14-20是IF语句的参数表。 图14-13是IF语句模块应用示例。
65
表14-19 IF语句支持的操作符 操 作 符 操 作 方 式 + OR & AND $ XOR = 等于 不等于 > 大于
操 作 符 操 作 方 式 + OR & AND $ XOR = 等于 不等于 > 大于 < 小于
66
表14-20 IF语句的参数说明 名 称 数值和选项 说 明 Number of Inputs 2~10 选择IF语句中的输入量数目 IF
名 称 数值和选项 说 明 Number of Inputs 2~10 选择IF语句中的输入量数目 IF User Defined 指示出IF条件中使用的操作符:+, &, $, =, , >, <以及变量a, b, c, d, e, f, g, h, I , j ELSE Output On 或Off 选择“On”,则输出信号为false,即当由IF语句计算出的条件为false时输出信号为高电平 ELSE IF Inputs 若选“On”,则使n输入信号使能(这里n是ELSE IF的输入),即能使用此n将多个IF语句模块级连起来
67
图 IF语句模块应用示例
68
逻辑位操作符模块 逻辑位操作符模块(Logical Bit Operator Block)的功能是对1个位的输入进行逻辑操作,这里可以规定任何数目的输入。如果此整数是正的,就被看成是布尔量1;否则,被看成是0。 表14-21是此模块的参数表。 图14-14是此Logical Bit Operator模块的应用示例。
69
表14-21 逻辑位操作符模块参数说明 名 称 数值和选项 说 明 Logical Operator
表 逻辑位操作符模块参数说明 名 称 数值和选项 说 明 Logical Operator AND, OR, XOR, NAND, NOR或NOT 设置所希望选用的操作符 Number of Inputs 1~16 选定输入的数目,如果是NOT逻辑操作符,则默认为1
70
图14-14 Logical Bit Operator模块的应用示例
71
逻辑总线操作符模块 逻辑总线操作符模块(Logical Bus Operator Block)的功能是对总线进行诸如AND,OR,XOR或NOT的逻辑操作,可以通过输入十进制数或移位的方式来禁止这些操作。 表14-22是此模块的参数表。 图14-15是应用此模块的示例。
72
表14-22 逻辑总线操作符模块参数说明 名 称 数值和选项 说 明 [number of bits].[ ] 1~51
表 逻辑总线操作符模块参数说明 名 称 数值和选项 说 明 [number of bits].[ ] 1~51 设定小数点左边的位数,包括符号位。此参数不适用于1位的总线 [ ].[number of bits] 0~51 设定小数点右边的位数 Logical Operator AND, OR, XOR, Invert, Left, Shift Right, Rotate Left, Rotate Right, 设定进行何种逻辑操作 Number of Bits to Shift User Defined 设定希望移位的位数
73
图14-15 Logical Bus Operator模块的应用示例
74
LUT模块 查表(LUT)模块在存储表中储存的数据是以双(地址线宽)字方式来放置的。所放每一字的大小是由MATLAB数据矢量规定的。在将VHDL进行综合中,综合器需根据表格的大小来确定使用何种硬件实现。可选的硬件资源是EABs(嵌入式阵列块)、ESBs(嵌入式系统块)或矩阵RAM。对此项设计应该选择手动综合与适配流程来完成。 表14-23是此模块的参数表。
75
表14-23 LUT模块参数说明 名 称 数值和选项 说 明 Output Data [number of bits].[ ] 1~51
名 称 数值和选项 说 明 Output Data [number of bits].[ ] 1~51 设置小数点左边的存储数据位位数,包括符 号位 Output Data [ ].[number of bits] 0~51 设定小数点右边的存储数据位位数 Address Width 2~16 设定地址宽度 MATLAB Array User Defined 数列范围必须一维的MATLAB阵,其长度要小于2的地址线宽的幂次。可以在“MATLAB Command Window”中用一个变量来规定这个一维阵,或者直接在“MATLAB Array”栏中设定其大小
76
Use LPM On 或Off 若对“Use LPM”选“On”,SignalCompiler就将使用LPM库中的Lpm_rom模块来完成LUT表的功能;如果选“Off”,则利用Case条件句的方式完成查表功能。注意,Altera推荐用户对“Use LPM”选“On”,以便能获得更大的数据表,例如能大于8位数据线宽度 Register Address 若选“On”,将产生输入地址总线,如果目标器件是Stratix或Cyclone,并选用LPM,则必须对此项选“On”
77
n-to-1多路选择器模块 n-to-1多路选择器模块是一个n选1的全二进制总线多路选择器,即此多路选择器的输出数据宽度等于输入信号线宽中最大的宽度。此外,任何数据类型都适合于此模块。 图14-16是此多路选择器应用实例。其中上图是Full binary选择方式,下图是One hot选择方式。 表14-24是此模块的参数表。
78
图 n-to-1多路选择器模块应用示例
79
表14-24 多路选择器模块参数说明 名 称 数值和选项 说 明 Number of Input Data Lines 2~10
表 多路选择器模块参数说明 名 称 数值和选项 说 明 Number of Input Data Lines 2~10 选择输入信号线的数量 One Hot Select Bus On 或Off 选择是否使用One Hot多路控制选择方式来作为总线选择信号,而不是用Full Binary。 One Hot选择方式是选控线中选中的为1(或0),其余为0 (或1),选控线的宽度等于n。Full Binary法则是用二进制全排列法选控
80
14.4 状态机函数库 FIFO控制状态机设计示例 状态转换表如图14-17所示。默认的状态机表格符号如图14-18所示。默认的状态机有5个输入端和5个状态。每一状态以一个输出代表。当状态机运行时,如果相应的状态等于当前状态,则此输出为电平1,所有其它输出为0。在Simulink中,输入和输出是用有符号整数表示的,而在VHDL中,输入和输出是由标准逻辑位矢量表示的。
81
下面介绍在DSP Builder中状态机的设计流程。在此以FIFO控制状态机设计fifo_control_logic
下面介绍在DSP Builder中状态机的设计流程。在此以FIFO控制状态机设计fifo_control_logic.mdl为例。此项设计中包含一个用于FIFO进行逻辑控制的简单的状态机。此状态机向一双口RAM的输入端以及地址计数器的输入端馈入控制信号。这个状态机的操作步骤和流程如下: (1) 当FIFO的数据压入信号一出现,且此时地址计数器的计数值小于250,地址计数器就递增1,于是一个字节的数据就被压进(写入)到RAM中去了。
82
图 状态机转换表图
83
图 默认状态机表模块
84
(2) 当FIFO的数据弹出信号一出现,且地址计数值大于 0,地址计数器就递减1,于是一个字节的数据就被弹出(被读出RAM)。
表14-25是FIFO控制器的状态转换表。图14-19是此FIFO控制器的顶层设计原理图。
85
表14-25 FIFO控制器的状态转换关系 当前状态 条 件 次 态 Empty (push =1) & (count_in!=250)
条 件 次 态 Empty (push =1) & (count_in!=250) push_not_full (push =0) & (pop=0) idle Full (pop=1) pop_not_empty Idle (pop =1) & (count_in = 0) empty push =1
86
Idle (pop =1) & (count_in! = 0) pop_not_empty (push =1) & (count_in=250) full (push =0) & (pop=0) idle (pop =1) & (count_in = 0) empty (push =1) & (count_in!=250) push_not_full
87
push_not_full (push =1) & (count_in!=250) empty (push =1) & (count_in=250) full (pop =1) & (count_in! = 0) pop_not_empty
88
图 FIFO控制器的顶层设计原理图
89
状态机设计流程 下面以上节中的FIFO控制器状态机为例,说明利用状态机表格来设计状态机时涉及的具体步骤。 1. 加入状态机表格模块 在Simulink设计中加入状态机表格模块,并为此模块取一个名字。图14-20中即为此模块,此例中,模块的名字是fifo-controller。
90
图 状态机模块图
91
2. 设定状态机的特性 双击该表格模块,以便能设定状态机的特性。当出现“State Machine Builder”对话框后,选择“Inputs”页。“Inputs”页将显示出用于定义状态机的输入名称并展示出一个允许设计者向其中加入、改变和消去输入名称的界面。如图14-21所示是在定义了FIFO控制状态机后的“Inputs”页。
92
图14-21 “State Machine Builder”的“Inputs”页
93
3. 设定状态名 单击“State”页,将显示用于定义状态机的状态名并给出允许设计者加入、修改和删除状态名的界面。在“State”页上也可选择状态机的复位状态。复位状态即为当复位输入信号到来时状态机即向此状态转换。
94
图 “State”页界面
95
4. 设定状态机工作方式 在设定好输入信号与状态名后,点击“Conditional Statements”页,准备描述状态机的工作方式(如图14-23所示)。“Conditional Statements”页显示的是状态转换表,表中含有状态机的条件描述。其中条件描述由3部分组成: (1) 当前状态; (2) 导致转换方式的条件; (3) 状态机转换的次态。
96
当前态和次态的状态值必须是在“State” 页中定义的状态名。表14-26给出了定义条件描述的条件操作符的优先级别。注意,在“Conditional Statements”页中至少应定义一个条件描述。此外,如果希望状态机能根据某个条件无条件地从一种状态向另一种状态转换,那么这个条件就可用1来表述。
97
表14-26 条件操作符的优先级别 比较操作符 说 明 优先级 示 例 -(unary) 负 1 -1 (…) 括号 (1) = 数值相等
表 条件操作符的优先级别 比较操作符 说 明 优先级 示 例 -(unary) 负 1 -1 (…) 括号 (1) = 数值相等 2 in1=5 != 不等于 in1!=5 > 大于 in1>in2 >= 大于等于 in1>=in2 < 小于 in1<in2 <= 小于等于 in1<=in2 & 与 (in1=in2)&(in3>=4) 或 (in1=in2) (in1>=in2)
98
图14-23所示即为“Conditional Statements”页。在此已定义了FIFO控制器的条件描述。
99
表14-26中的条件描述一旦确定,状态机的工作方式就确定了。一般地,当一状态机处于某一特定状态时,就会对次状态的条件进行计算判断,以便确定下次转换到什么状态上去。对于条件叙述表中所列的条件,状态机是顺序计算判断的。
100
表14-27 idle状态的各种状态转换条件 当前态 条 件 次 态 idle (pop =1) & (count_in = 0)
条 件 次 态 idle (pop =1) & (count_in = 0) Empty push =1 push_not_full (pop =1) & (count_in! = 0) pop_not_empty (push =1) & (count_in=250) Full
101
表14-27所示描述了当状态机处于“idle”状态时的各种态状转换条件。由于条件(pop =1) & (count_in = 0)在表中的位置高于条件(push =1) & (count_in=250),所以,前者就有更高的优先权。当它们同时满足时,将首先 依前者的条件进行转换。 条件(pop =1)&(count_in!=0)仅次于最高优先权的条件描述;而条件(push =1) & (count_in=250)所处的位置具有最低的优先权。 例14-2就是表14-27编译转换而来的VHDL描述,其中的_sig是在VHDL文件中另加的。
102
【例14-2】表14-27对应的VHDL文件。 IF ((pop_sig=1) AND (count_in_sig=0)) THEN next_state <= empty_st; ELSIF (push_sig=1) THEN next_state <= push_not_full_st ; ELSIF (pop_sig=1) AND (count_in_sig / =0)) THEN next_state <= pop_not_empty_st ; ELSIF (push_sig=1) AND (count_in_sig =250)) THEN next_state <= full_st ; ELSE next_state <= idle_st ; END IF ;
103
也可以通过使用“Move Up”和“Move Down”按钮来改变条件描述语句的上下位置。例如,将表14-27改变后即如表14-28所示。
104
表14-28 对表14-27进行改变的结果 当前态 条 件 次 态 idle (pop =1) & (count_in = 0) empty
表 对表14-27进行改变的结果 当前态 条 件 次 态 idle (pop =1) & (count_in = 0) empty (push =1) & (count_in=250) full (pop =1) & (count_in! = 0) pop_not_empty push =1 push_not_full
105
【例14-3】表14-28对应的VHDL程序。 IF ((pop_sig=1) AND (count_in_sig=0)) THEN next_state <= empty_st ; ELSIF (pop_sig=1) AND (count_in_sig / =0)) THEN next_state <= pop_not_empty_st ; ELSIF (push_sig=1) AND (count_in_sig =250)) THEN next_state <= full_st ; ELSIF (push_sig=1) THEN next_state <= push_not_full_st ; ELSE next_state <= idle_st ; END IF ;
106
5. 错误检测 点击“Design Rule Check”页面,以便确定前面各步骤中所定义的状态机没有违反任何设计规则。然后点击“Analyze”,对状态机中所设的条件进行计算判别,以确定是否存在一般错误或逻辑错误。如果有错,将在“Analyze Results”栏中以红色给出错误信息。 图14-24所示即为点击“Analyze”后的“Design Rule Check”页面。如果发现在信息栏的分析结果中有错误报出,应该找出错误所在,重新启动检测分析的操作,直至排除所有错误。 最后就是功能仿真,通过后,就可以将其转换成VHDL代码描述了。
107
图14-24 State Machine Builder Design Rule Check页面
108
6. 将结果存盘 点击“OK”,将所有更改后的内容存盘。这时就关闭了“State Machine Builder”窗口,并将回到Simulink设计文件。 这时的设计文件将自动更新在前面各步骤中定义的输入/输出名称。图14-25是FIFO设计实例更新后的State Machine Table模块。
109
图 设定了状态机后的表格模块
110
例14-4是State Machine Builder产生的状态机的完整VHDL程序的结构体部分。
【例14-4】状态机的结构程序。 PROCESS (clk, reset) BEGIN IF ( reset = ' 1 ' ) THEN current _state <= empty_st ; ELSIF rising_edge (clk) THEN current _state <= next_state ; END IF; END PROCESS ;
111
PROCESS (current _state, count_in_sig, pop_sig, push_sig)
BEGIN CASE current _state IS WHEN empty_st => IF ( ( push_sig = 1) AND ( count_in_sig / =250 ) ) THEN next_state <= push_not_full_st; ELSIF ( ( push_sig = 0) AND ( pop_sig = 0 ) ) THEN next_state <= idle_st; ELSE next_state <= empty_st; AND IF;
112
WHEN full_st => IF ( ( push_sig = 0) AND ( pop_sig = 0 ) ) THEN next_state <= idle_st; ELSIF ( ( push_sig = 1) ) THEN next_state <= pop_not_empty_st; ELSE next_state <= full_st; AND IF; WHEN idle_st => IF ( ( pop_sig = 1) AND ( count_in_sig = 0 ) ) THEN
113
next_state <= empty_st;
ELSIF ( ( push_sig = 1) ) THEN next_state <= pust_not_full_st; ELSIF ( ( pop_sig = 1) AND ( count_in_sig / = 0 ) ) THEN next_state <= pop_not_empty_st; ELSIF ( ( push_sig = 1) AND ( count_in_sig = 250 ) ) THEN next_state <= full_st; ELSE next_state <= idle_st; AND IF;
114
WHEN pop_not_empty_st =>
IF ( ( push_sig = 0) AND ( pop_sig = 0 ) ) THEN next_state <= idle_st; ELSIF ( ( pop_sig = 1) AND ( count_in_sig = 0 ) ) THEN next_state <= empty_st; ELSIF ( ( push_sig = 1) AND ( count_in_sig / = 250 ) ) THEN next_state <= pust_not_full_st;
115
ELSIF ( ( pop_sig = 1) AND ( count_in_sig / = 0 ) ) THEN
next_state <= pop_not_empty_st; ELSIF ( ( push_sig = 1) AND ( count_in_sig = 250 ) ) THEN next_state <= full_st; END IF; END CASE; END PROCESS ; 最后,将此State Machine Table模块连接到总体设计文件的相应部分。
116
14.5 Storage 库 延迟模块 延迟模块(Delay Block)根据延时深度(Depth)表中设定的值确定通过信号的延时量。表14-29是此模块的参数表。
117
表14-29 延迟模块的参数说明 名 称 数值与选项 说 明 Depth User Defined 设定此模块的迟时长度
表 延迟模块的参数说明 名 称 数值与选项 说 明 Depth User Defined 设定此模块的迟时长度 Use Control Inputs On or Off 选择是否使用另加的控制输入口,如时钟使能,复位等 Clock Phase Selection 相位选择。只有当“Number of Pipeline Levels”的设置大于1时,才能有此选项。这里所选的相位值以一个二进制数来表达。二进制中的1表示在此相位中的模块被使能例如: 1:表示模块始终使能,所有的数据都可通过此模块 10:表示每隔一个相位模块被使能一次,而只有此时数据才能通过 0100:此模块在4个相位数中的第2相位数输出时才被使能,并且只有在此时数据才能通过。换句话说,在第1、3、4位数出现时数据无法通过此模块
118
图14-26是Delay模块的一个使用示例。 图 Delay模块应用示例
119
14.5.2 Down Sampling和Up Sampling模块
采样率降低模块(Down Sampling Block)可根据输入端给出的采样率来降低输出采样率。输出数据的速率等于每mth周期采样一次的采样速率,其中m等于下降的采样率。在Simulink中,输入采样率是归一化的。 表14-30是此模块的参数表。图14-27是Down Sampling模块的应用示例。
120
表 采样率降低模块参数说明 名 称 数 值 说 明 Down Sampling Rate 1~20 确定下降采样率值
121
图14-27 Down Sampling模块的应用示例
122
2. Up Sampling模块 增加采样率模块(Up Sampling Block)将根据输入的采样率增加输出的采样率。输出数据将以每周期采样一次的速率来进行,表14-30中的参数1~20等于增加的采样率。(表14-31是此模块的参数表)。 图14-28是Up Sampling模块应用的示例图。
123
表 Up Sampling模块参数说明 名 称 数 值 说 明 Up Sampling Rate 1~20 设定增加采样率值
124
图 Up Sampling模块的应用示例
125
双口RAM模块 在设计中,如果需要使用双口RAM模块(Dual-Port RAM Block),SignalCompiler就会将数据映射到Altera器件的嵌入式RAM中(如EAB或ESB),即使用EAB或ESB来重构此双口RAM。这时的RAM中的内容将被初始化为0。 Dual-Port RAM模块能接受任何数据类型的输入。此模块所有的输入端口都是可以锁定的,所有的输出端口都无锁存功能。图14-29是此双口RAM的应用示例。表14-32是此模块的参数表。
126
图 双口RAM的应用示例
127
表14-32 双口RAM模块参数说明 名 称 数值和选项 说 明 Address Width 1~20 设定地址线宽
名 称 数值和选项 说 明 Address Width 1~20 设定地址线宽 Clock Phase Selection User Defined 相位选择。只有当“Number of Pipeline Levels”的设置大于1时才能有此选项。这里所选的相位值以一个二进制数来表达。二进制中的1表示在此相位中的模块被使能。例如: 1:表示模块始终使能,所有的数据都可通过此模块 10:表示每隔一个相位模块被使能一次,而只有此时数据才能通过 0100:此模块在4个相位数中的第2相位数输出时才被使能,并且只有在此时数据才能通过。换句话说,在第1、3、4位数出现时数据无法通过此模块
128
双口RAM模块有如下端口: ● d——输入数据口 ● q——输出数据口 ● rdad——读地址总线 ● wrad——写地址总线 ● wren——写使能
129
并行到串行转换模块与串行到并行转换模块 1. 并串转换模块 并行到串行转换模块(Parallel to Serial Block)的功能是将并行输入端口(Input)转换成串行总线输出(Output)。表14-33是此模块的参数表。
130
表14-33 并行到串行转换模块参数说明 名 称 数值和选项 说 明 Data Bus type Signed Integer,
表 并行到串行转换模块参数说明 名 称 数值和选项 说 明 Data Bus type Signed Integer, Signed Fractional Unsigned Integer 选择总线的数值格式 [number of bits].[ ] 1~51 设定小数点左边的位数,包括符号位。此参数不适用于1位总线 [ ].[number of bits] 0~51 表示小数点右边的位数。此参数只适用于有符号小数总线 Serial Bit Order MSB First ISB First 选定是将并行数据的最高位MSB还是最低位LSB作串行输出的第1位
131
图14-30是此并串转换模块的应用示例。 图 并串转换模块的应用示例
132
2. 串并转换模块 串行到并行转换模块(Serial to Parallel Block)的功能是将一串行输入数据(Input sd)转换成并行总线输出(Output d)。表14-34是此模块的参数表。图14-31是此串并转换模块的应用示例。
133
图14-31 Serial to Parallel Block模块的应用示例
134
表14-34 串并转换模块的参数说明 名 称 数值和选项 说 明 Data Bus type
表 串并转换模块的参数说明 名 称 数值和选项 说 明 Data Bus type Signed Integer, Signed Fractional Unsigned Integer 选择总线的数值格式 [number of bits].[ ] 1~51 设定小数点左边的位数,包括符号位。此参数不适用于1位总线 [ ].[number of bits] 0~51 表示小数点右边的位数。此参数只适用于有符号小数总线 Serial Bit Order MSB First,ISB First 选定串行输入的顺序,即是将最高位还是最低位作为串行数据的第1位
135
数据排列方式模块 数据排列方式模块(Pattern Block)可以重复产生一组按一定数位顺序排列的周期性数位序列。例如,以01100为一周期的数据序列,则此模块将重复连续发生该序列为: … 设计者可以通过使用Pattern模块的输出来作为时钟使能的输入控制,从而改变锁存模块的输出数据速率。表14-35是此模块的参数表。图14-32是此模块的应用示例。
136
图 Pattern 模块的应用示例
137
表14-35 Pattern模块参数说明 名 称 数值与选项 说 明 Binary Sequence User Defined 设定数据序列
名 称 数值与选项 说 明 Binary Sequence User Defined 设定数据序列 Use Control Inputs On或Off 设定是否使用另外的控制信号
138
ROM EAB模块 ROM EAB模块可以作为一般的数据ROM来使用。ROM的数据必须用十六进制数文件设定。为了使用Altera器件中的EAB来形成ROM,需要使用ROM EAB模块初始化中读取包含ROM数据的十六进制格式的文件。这可以使用Quartus II来产生十六进制数据文件(参阅第2章)。表14-36是此模块的参数表。 注意:如果已用Quartus II产生了Hex文件,则必须存放在DSP Builder设计工程的工作目录中。
139
表14-36 ROM EAB模块说明 名 称 数值和选项 说 明 Data Bus type Signed Integer
名 称 数值和选项 说 明 Data Bus type Signed Integer Signed Fractional Unsigned Integer 选择总线的数值格式 [number of bits].[ ] 1~51 设定小数点左边的位数,包括符号位。此参数不适用于1位总线 [ ].[number of bits] 0~51 设定小数点右边的位数。此参数只适用于有符号小数总线
140
名 称 数值和选项 说 明 Address Width 2~20 设定地址线宽 Clock Phase Selection User Defined 相位选择。只有当“Number of Pipeline Levels”的设置大于1时才能有此选项。这里所选的相位值以一个二进制数来表达。二进制中的1表示在此相位中的模块被使能。例如: 1:表示模块始终使能,所有的数据都可通过此模块 10:表示每隔一个相位模块被使能一次,而只有此时数据才能通过 0100:此模块在4个相位数中的第2相位数输出时才被使能,并且只有在此时数据才能通过。换句话说,在第1、3、4位数出现时数据无法通过此模块 Input Hex File <文件名>.hex 指定待用的HEX文件的文件名
141
图14-33是ROM EAB模块的应用示例。 图 ROM EAB模块的应用示例
142
Shift Taps模块 Shift Taps模块可以形成移位寄存器,可用于滤波器和卷积算法的设计。在Altera器件中,Shift Taps模块可以实现内置RAM结构的移位寄存器,这种移位寄存器的实现方法是构成大移位寄存器的有效方法。这种模块的输出是根据沿移位寄存器有规则的间隔点来完成的,这就是所谓的“Taps”。在Stratix器件中,这种模块需要很小的内部RAM。图14-34是Shift Taps模块的应用示例。
143
图 Shift Taps模块的应用示例
144
表14-37是这种模块的参数表。 表14-37 Shift Taps模块参数说明 名 称 数值和选项 说 明 Number of Taps
名 称 数值和选项 说 明 Number of Taps User Defined 规定沿移位寄存器放置规则间隔排列Tap的数字 Distance Between Taps 规定以时钟周期规则放置的间隔拍之间的距离 Use Shift Out On 或Off 选择移位寄存器的末端输出用于级连的信号 Use Clock Enable 选择是否使用外加的控制信号时钟使能输入信号 Use Dedicated Hardware 如果目标器件是Stratix器件,选择是否在器件的RAM中实现模块功能
145
PLL模块 DSP Builder使用PLL模块可以综合出一个基于某一参考时钟的时钟信号。在现代超高速数字系统设计中,数字锁相环已经成为这些系统中非常重要的组成部分。PLL的使用能改善零延迟线的时序以及全系统的时钟合成。Stratix器件提供了非常先进的内置PLL。而在传统的系统中,PLL必须由十分复杂的专用器件来担任。在Stratix器件中的每一个PLL都能有多个时钟输出,这些时钟产生于40个系统时钟中的任何一个。
146
因此,对于用户的时钟控制需要,PLL能提供完整的覆盖。内部PLL具有全频率合成的能力(既能倍频合成也能分频合成),以及优化I/O口时序的相移功能。此外,内部PLL还有许多高级性能,如可编程带宽、宽频谱、时钟切换等。 PLL模块能产生以系统时钟频率为基准的倍频的内部时钟,Stratix和Cyclone器件都能针对参考时钟进行倍频和分频。
147
如果要使用这种内置式PLL,应该遵守以下限制:
● 所有DSP Builder模块的Simulink采样时间必须等于PLL输出时钟周期之一。 表14-38是PLL的参数表。
148
表14-38 PLL模块参数说明 名 称 数 值 说 明 Input Clock Frequency 用户定义 输入参考时钟
名 称 数 值 说 明 Input Clock Frequency 用户定义 输入参考时钟 Number of Output Clocks 1~6 PLL时钟输出的数目 Clock Frequency Multiplication Factor 用参考时钟乘以设定值 Clock Frequency Division Factor 用参考时钟除以设定值
Similar presentations