波形ROM逻辑
任何仪表数字设备(电子资源勘探器,模拟发现,模拟发现2,数字发现等)的核心是加载相关的配置文件的FPGA电路。波形软件与FPGA通信,并将用户界面提供作为仪器的工作台。
数字图案生成器(图案)仪器处理FPGA的DIO(数字输入/输出)引脚。它允许定义三种类型的输出I / O对象:信号,总线或罗逻辑。可以构建相同或不同类型的多个对象。
下图显示了与单个DIO引脚相关联的框图。输入缓冲区(IB)和输出缓冲区(OB)是FPGA IO银行结构的固有特性。在FPGA模块中实现了模式存储器内存.所有其他模块都在FPGA的可编程区域中实现。
在最多一个Pattern Generator对象中,可以将DIO行设置为Output。当一条线被静态I/O用作输出元素(滑块、按钮或开关)时,它的优先级高于模式中的信号配置(在框图中没有显示)。
信号和总线产生时序输出值:采样率来自系统时钟,采样值要么是算法生成的(时钟、脉冲、计数器等),要么是从模式存储器(自定义)读取的。在后一种情况下,Counter指向模式内存中的当前示例。
为罗在模式内存中存储一个布尔函数真值表。一个n位输入总线(来自DIO引脚)为模式内存构建地址。因此,它生成输出值作为DIO参数的布尔函数。在下图中,MUX2选择Pattern Memory, MUX1选择n位输入总线。
因为模式记忆的大小被限制为2n位置,输入缓冲区IB只存在于第n个DIO引脚(0到n-1)。然而,任何DIO引脚都可以实现DIO引脚0到n-1的布尔函数。
对于模拟发现,模拟发现2和电子资源管理器默认配置,n = 10,这意味着只有DIO0 ... DIO9可以用作输入罗逻辑块。这些设备的备用配置扩展n = 14。对于数字发现,n = 15。
由于模式存储器是在FPGA块中实现的内存时,布尔函数在预标时钟上同步。
图1 DIO引脚框图。
1.使用ROM逻辑实现组合布尔函数
2.使用ROM逻辑实现顺序布尔函数
在其自己的布尔函数中用作输入(参数)的DIO引脚关闭反馈回路,DIO引脚是状态位。一个或多个状态位在有限状态机(FSM)中构建状态变量。
下面的图显示了一个Mealy FSM映射到罗逻辑对象。摩尔FSM不使用输入输出逻辑块。
注意,同时用作输入和输出(DIOx)的引脚形成了状态变量;仅作为输入(diy)的引脚为FSM输入,作为仅作为输出(DIOz)的引脚为FSM (synchronized)输出。在FPGA DIOx引脚上,状态变量总是可用的。
FSM可以是一个,也可以是多个罗逻辑对象。在后一种情况下,一个干净的设计将使用一个罗逻辑对象用于下一个状态逻辑和状态寄存器,另一个对象用于输出逻辑和输出寄存器。
图3实现了MEALY状态机的ROM逻辑。
3.波形中的ROM逻辑用户界面
在模式生成器中,单击绿色的“加号”并选择罗逻辑,如下所示。
图4打开新的ROM逻辑对象。
在弹出窗口中,选择“属性”选项卡。选择或键入同步频率。使用绿色“加”标志添加左右列表中的输入和输出信号。使用绿色箭头在列表中向上或向下移动信号。列表订单将保留在真相表格中。
选择Truth Table选项卡。编辑或导入真值表。使用真值表规则:
-
如果方便的话,可以在Properties选项卡中更改信号名称(可选)。更改后的名称将在真值表中使用。
-
如果一个信号同时在输入和输出窗格中使用,它是一个状态变量;输入窗格在Current State中显示其值,输出窗格指示其在Next State中的值。
-
在输入窗格中使用0,1或X(不用关心)。
-
具有n个输入信号的扩展真理表(无x输入值)有2n行。包含k个X值的行是2的折叠版本k扩展真理表的行。
-
确保覆盖所有可能的输入案例,即所有输入线的逻辑重聚为2n.
-
在输出窗格中使用1,0," SignalName "或" /SignalName "。“SignalName”是输入窗格中的一个信号的名称。“/”代表逻辑上的NOT。
-
表中的行是“连续的”,也就是说,在表中一行可以覆盖它上面的行。例如,表中的第一行可能用于描述默认输出值,而随后的行覆盖特定情况。
-
相同的功能块可能会在多个中拆分罗逻辑对象,以优化真值表。
-
单元格的黄色背景表示语法错误。
的规则和罗逻辑GUI下面的示例演示了操作。
4.例如:三输入,同步与门。
在图5中,罗逻辑对象命名为AND3(可选)。选择di0…DIO2作为输入,di3作为输出。信号名称修改为i0…i2,分别为o3(可选)。同步频率设置为5MHz,意味着输出信号将相对于运行模式发生器的时刻同步到一个相位为0°的5MHz时钟;这样,输出信号与Pattern生成器生成的其他信号同步。
在真值表选项卡中,第一行描述了默认情况,输出信号值为0。如果输入窗格中有三个x,那么这一行就等于23.= 8条扩展线。但是,第二行覆盖了八个线,将输出信号强制到1当所有输入为1时。等效的VHDL代码是:
- 实际表中的第1行和3:进程(I2,I1,I0)开始O3 <='0';- 如果i2 ='1'和i1 ='1'和i0 ='1'然后O3 <='1',则默认输出为'0' - 行2。- 如果特定情况结束,则覆盖O3结束过程;
请注意,真相表线是“顺序”,具有与VHDL过程中的线相同的含义:一行可以在这两种情况下覆盖前一行的效果。
图5同步3输入和门ROM逻辑。
为了验证3输入和门的行为,运行模式生成器和静态IO。将DIO2…DIO0设置为“Switches”,保持DIO3为“。领导,在静态IO中。请注意,只有当所有DIO2,DIO1和DIO0都高时,DIO3才能高。确保关闭静态IO。
图6。使用静态IO验证3输入同步与门。
要观察同步3输入和门的动态行为,请在图案发生器中定义DIO2 ... DIO0上的二进制计数器。将时钟频率设置为3MHz。(但是,最接近的频率波形可以生成为2.941MHz。)选择此频率不为整数或uplultiple罗逻辑频率(5 mhz)。在DIO4上定义一个5MHz时钟(与罗逻辑)。这个钟不是由罗逻辑,但将作为观察的参考在逻辑分析仪。
打开逻辑分析仪。添加/总线与DIO2 ... DIO0,以及添加/信号DIO3和DIO4。在DIO2的下降沿设置触发器。设置方便的时间基础和位置。运行模式生成器和逻辑分析仪。观察DIO3和DIO4的稳定图像,因为它们的频率与BUS1无关。
在逻辑分析器中运行单一步骤。观察到DIO3 (AND门输出)与Bus1输入的边缘不同步,但与DIO4: DIO4不是实际的罗逻辑时钟,但它有相同的频率和相位,所以它可以用作实际的图像罗逻辑时钟。自罗逻辑同步到每个时钟周期结束,DIO4以0开始,以1继续,DIO3似乎在DIO4下降沿同步。
图7为3输入同步和门(上)产生输入信号和参考时钟,并观察动态行为(下)。
5.示例:使用count启用输入的二进制计数器。
在下图中,DIO8被重命名为CE,并被用作Count Enable。DIO7…DIO0被重命名为c7…c0,并且是8位二进制计数器的状态/输出位。注意在真值表中如何使用x、信号名称和否定的信号名称。计数器的时钟是100kHz。真实值表是用Excel写的(彩色背景区域在CounterWithCe8Bit的表格中romlogictruthtables.xlsx.),并复制在适当的选项卡。
真值表中的第1行(相当于28=256扩展行)表示:当LSB c0= ' 0 ':所有位c7…c1保持值;只有当CE= ' 1 '时,c0才会变成' 1 '。其他所有行都涵盖了c0= ' 1 '时的情况。
第2行(相当于27=128扩展行):表示当c1= ' 0 '和c0= ' 1 '时,如果CE= ' 1 ',两者都将交换,如果CE= ' 0 ',则保持其值;所有其他位保持它们的价值。
所有九条线相当于29=512扩展行并定义所有可能的情况(8位+1计数启用)。
为了验证该行为,在DIO8上添加一个时钟信号(频率=1kHz,占空因数=80%)。如前所述,对于二进制计数器,DIO8是Count Enable。
在逻辑分析仪中,添加/总线DIO7…运行模式生成器和单步逻辑分析仪。观察二进制计数器的行为。
图8定义(向上/中间)并验证(向下)具有启用ROM逻辑对象的8位二进制计数器。
6.例子:PWM调制器
在下图中,一个n位二进制计数器产生一个数字锯齿信号。当样品值大于计数器含量时,比较器驱动DIOx = 1。
图9。脉宽调制框图。
DIOx载频为:
$ $ f f{问}/{航母}= 2 ^ n $ $
如果n位样品是恒定的,DIOx引脚以恒定的占空比驱动:
$ $ DF =(样本)/ 2 ^ n $ $
一个5位总线被创建来产生调制器n位采样(DIO4…DIO0)。对于第一个实验,总线类型被设置为Number,以生成0到31之间的静态值。
图10。模式发生器准备的PWM与静态输入。
一个5位计数器实现在罗在DIO9…DIO5上,重命名为c4…c0。真值表是用Excel写的romlogictruthtables.xlsx.),并复制到真值表选项卡。时钟频率设置为1MHz。
图11。5位计数器ROM逻辑。
第二个罗逻辑(表格PWM中romlogictruthtables.xlsx.)比较DIO9…DIO5 = c4…c0 = " 5BitCounter "与DIO4…DIO0 = s4…s0 = " Sample "。当“Sample”较高时,DIO10 = CY =“CarryOut”为高。再次注意高阶位(真值表后面的行)是如何覆盖低阶位(真值表前面的行)的。
图12. 5-BY-5位比较器ROM逻辑。
外部钢筋混凝土采用低通滤波器(100kΩ, 1nF)构建模拟信号,去除PWM信号中的载波。波形示波器显示PWM信号(C1)和滤波信号(C2)。
图13。RC低通滤波器。
注意C1的频率和占空比(在图形视图和测量面板上):
$ $ f f{问}/{航母}= 2 ^ n = 1 mhz / 2 ^ 5 = 31.25千赫;$ $ $ $ DF =样品/ 2 ^ n = 7/2 ^ % $ $ 5 = 21.875 \文本
在Pattern Generator中修改样本值,观察其对示波器信号的影响。
图14.静态PWM范围捕获。
可变n位采样可以用作调制器信号。对于第二个实验,在Pattern Generator中设置一个定制的5位总线1,以驱动一个每周期有100个样本的窦信号。生成一个.csv文件,包含100个表单值(表格SinusSamples inromlogictruthtables.xlsx.):
$ $ sample_i = 16 + int(15 *罪((2∙π∙i) / 100))∈(1…31)$ $
使Bus1自定义并导入.csv文件。您还可以从Excel文件中复制示例,并将它们粘贴到Edit Custom Bus窗口中的Sample列中。
设置时钟频率为200kHz,窦频为:
$$ f_ {调制器} = f_ {sample} /(100)= 200khz / 100 = 2khz $$
图15。定制Bus1为100个样品窦。
该示波器显示C1上的可变占空比PWM信号,以及C2上的模拟信号,近似于一个窦。载频是恒定的(同上)。占空因数是可变的,平均值为50%。
图16.窦PWM和模拟信号。
7.例子:PDM调制器。
在下图中,一个n位累加器被用来一次又一次地添加样本值。Carry位是脉冲密度调制(PDM)信号。用f刷新累加器CNT.频率,而样本成功与f样本率。使用与PWM相同的频率和名称进行比较。
图17。PDM调制器框图。
为了能够非常快速地从PWM切换到PDM和回来,第二个模式生成器实例是从已经存在的一个打开:
图18。打开第二个模式生成器。
在PDM累加器中实现了一个5位PDM调制器罗逻辑对象,DIO 9 ... DIO5 = A4 ... A0作为“累加器”,DIO4 ... DIO0 = S4 ... S0作为“样品”和DIO10为“CY”,即PDM信号(复制彩色背景区域)romlogictruthtables.xlsx.并粘贴到真值表)。
图19所示。在ROM逻辑中实现PDM。
真相表完全扩展,具有1024行。左窗格包含DIO9 ... DIO0的所有二进制值。右窗格包含5位+累积总和:
$$(CY,a4…a0) \Leftarrow (a4…a0) + (s4…s0)$
要与PWM进行比较,使用类似的示例。同一个外部钢筋混凝土滤波器、调制器的时钟频率、窦采样存储器和采样频率均与相应的PWM实验中相同。
在静态实验中,产生相同的占空比,但频率更高,模拟信号的纹波更小。
图20。静态PDM范围捕获。
在动态实验中,使用相同的窦自定义Bus1,对于PWM。平均占空比又在50%左右,频率是可变的,对于相同的时钟频率,平均频率比PWM高得多。模拟信号的纹波也要小得多。
当样本值为1LSB或2时,PDM信号的最低瞬时频率会发生n-1LSB,与PWM信号的恒频相同。对于所有其他的采样值,当采样值在范围的一半时,产生的瞬时频率更高,高达时钟频率的一半。
打开Pattern生成器的两个实例,可以很容易地交替运行它们,以便在范围工具上进行比较。在一个实例上点击Run会自动将另一个实例转到Busy状态。
图21。窦PDM和模拟信号。
Spectrum Analyzer仪器用于分析频域中的数据。两个迹线对应于上述实验中的两个范围信道。在光谱视图中,在FcArtier设置光标。调制和模拟信号的一些参数显示在测量窗口中。
载体基本和谐波对PWM显着,而PDM在光谱中更均匀地均匀地扩展。
在PDM的情况下,测量对于SFDR,SNR,SINAD和ENOB具有更好的值。
图22。光谱比较