基于vhdl语言的波形发生器的设计内容摘要:
124=d=254。 when 125=d=254。 when 126=d=255。 when 127=d=255。 when others=null。 end case。 end if。 其中,时钟信号 clk,复位信号 clr, 8位二进制输出信号端口 d。 程序设计流程图如下图所示: 输 出 赋 值 0NYNY计 数 器 是否 为 1 2 7。 复 位 信 号是 否 为 0。 查 表 输 出计 数 器 加 1计 数 器 赋 值 0等 待 时 钟 上 升 沿开 始结 束 图 正弦波设计流程图 波形发生器的设计 8 方波 阶梯波运用 VHDL 语言中 if 语句设计,程序中每计数 64 次对输出信号进行一次翻转,从而得到周期为输入时钟信号周期 128 倍的输出方波信号。 程序设置内部节点信号 a 作为输出判断信号,计数器计数 063 后,对输出判断信号取反,实现0、 1的变化。 if t63 then t:=t+1。 else t:=0。 a=not a。 end if。 其中, a为 0 是输出低电平, a为 1时输出高电平。 if a =39。 139。 then q6=255。 else q6=0。 end if。 其中,时钟信号 clk,复位信号 clr, 8位二进制输出信号端口 q6。 程序设计流程图如下图所示: 波形发生器的设计 9 结 束开 始NY NYNY输 出输 出 赋 值 0输 出 赋 值 2 5 5等 待 时 钟 上 升 沿计 数 器 赋 值 0输 出 判 断 信 号 取 反计 数 器 加 1等 待 c l k 上 升 沿输 出 判 断信 号 赋 值 0输 出 判 断信 号 赋 值 1。 计 数 器< 6 3。 r e s e t信 号是 否 为 0。 图 方波设计流程图 6选 1多路开关 6选 1多路开关运用 VHDL语言中 case语句设计。 程序主要语句如下所示: case a is when 000=q=z1。 when 001=q=z2。 when 010=q=z3。 when 011=q=z4。 when 100=q=z5。 when 101=q=z6。 波形发生器的设计 10 when others=q=null。 end case。 其中,时钟信号 clk,输入选择 sel, 8位二进制输出信号端口 q。 程序设计流程图如下图所示: 结 束开 始sel输 入 选 择输 入 选 择 对应 输 出 q 图 6选 1多路开关设计流程图 波形发生器的设计 11 第三章 系统调试与分析 系统调试 调试方法 实验运用的是 VHDL 语言与原理图混合设计方法,因此有程序调试和原理图调试两部分。 实验步骤如下: 新建工程、 VHDL文档输入设计模块子程序 调试各个子程序是否存在语法错误的问题 对各子模块进行波形仿真,验证输出是否正确 各子模块生成图元文件 新建工程、原理图文档,将各子模块文件夹下的文档拷贝到新建工程中 根据系统设计框图将各个模块图元文件连成原理图 检验原理图是否正确 最后原理图仿真,检查波形图是否正确 调试故障 及解决方法 在整个实验调试过程中,最主要出现的问题是对 VHDL 语言的不熟悉,导致在程序编写过程中出现了不少语法错误导致影响实验结果的问题。 其次是软件运用不熟练使得影响实验进度,有时也会影响了实验调试。 针对实验中出现了问题,总结了以下一些解决方法和注意事项: 程序书写过程中要注意程序的层次,便于出错时对错误的查找; 程序输入时应仔细认真,以免个别字母的错误输入影响实验结果; 分模块设计分模块调试,便于对错误的纠正; 项目名必须与顶层设计文件名相同; 程序命名过程中,以一定意义的字母命名,便于之后读程序; 在原 理图设计上,注意总线的书写。 设计中主要用的是 VHDL语言中的 if语句和 case语句,因此对这两种语句的运用要十分熟悉。 并且其不区分大小写,所以在命名时应注意此问题。 结果分析 递增波形 通过对程序语句的调试过程,得到以下波形图: 波形发生器的设计 12 图 递增波形图 图 递增模块图 由波形图可以看出,在每个时钟上升沿,输出加 1,从波形图上我们也可以看到,输出由 00000000增至 11111111,从而得到了递增波形,并且其周期为时钟周期的 256倍。 因此,从调 试得到的波形图可知,程序设计实现了递增波形的产生功能。 递减波形 递减波形程序调试,得到了以下的波形图: 图 递减波形图 波形发生器的设计 13 图 递减模块图 由波形图可以看出,在每个时钟上升沿,输出减 1,从波形图上我们也可以看到,输出由 11111111减到 00000000,与递增波形正好是相反的,其周期与递增波形周期相等,为时钟周期的 256倍。 因此,从调试得到的波形图可知,程序设计实现了递减波形的产生功能。 三角波 三角波程序调试至无语法错误后,仿真得到以下波形图 : 图 图 三角波模块图 通过对波形图的分析,每个时钟上升沿计数器加 1或者减 1,有一个最大值11111111。 输出由 00000000递增至 11111111后再递减至 00000000,从而得到了三角波。 从图上我们可以看到输出的递增与递减,程序实现了三角波的产生功能。 正弦波 对正弦波程序的调试,得到了以下波形图: 波形发生器的设计 14 图 正弦波波形图 图 正弦波模块图 程序根据正弦波采样取点,得到了以上仿真波形。 与递增波形不同的是,正弦波设 计中由于取点并不按一定规律得到,无法采用循环来实现,相对于前面波形的设计较难一些。 因此,程序中利用 case语句,通过查表的方法来实现输出正弦波。 阶梯波 阶梯波调试得到波形图如下所示: 图 阶梯波波形图 波形发生器的设计 15 图 阶梯波模块图 与之前设计的递增波形比较我们不难发现,阶梯波与递增波形是类似的,其区别就在于,阶梯波阶梯增量为 16,而递增波形的阶梯增量是 1。 并且在阶梯波的设计中应注意,阶梯增量应设置为 n2 ,只有这样才能保证阶梯的每一层的阶梯高度是一样的。 实验设计程序实现了阶梯波的产生。 方波 方波调试得到波形图如下图所示: 图 方波波形图 图 方波模块图 由上图我们可以知道,程序的调试实现了方波的产生。 我们的输如时钟信号就是一个方波信号,因此,在方波发生器的设计上要相对简单。 实验是通过设置的计数周期,之后对输出信号进行翻转,从而得到所需的波形。 6选 1多路开关 波形发生器的设计 16 由于要实现用户对所需波形的选择功能,因此,实验设计了一个 6选 1多路开关。 通过对用户输入否认判断,从而输出用户所需的信号波。 调试得到如下波形图: 图 6选 1多路开关 图 6选 1。基于vhdl语言的波形发生器的设计
相关推荐
then coin=0011。 next_state=state3。 elsif datain=10 then coin=0100。 next_state=state4。 elsif datain=00 then act10=39。 139。 act5=39。 039。 coin=0000。 next_state=idle。 end if。 when state3= if datain=01
//用 read()函数读取实际按键值放入缓存中 if (read(buttons_fd, current_buttons, sizeof current_buttons) != sizeof current_buttons) { . . perror(read buttons:)。 //读取失败则显示错误信息 exit(1)。 } //循环比较数组 buttons[i]和
((SelectWays == 10 || SelectWays == 100) amp。 amp。 NextInput == 2) { Number2 =。 } } 12 public void ShowResult() // “ =”显示结果 { if (SelectWays == 100 || SelectWays == 11) { if (Op_Div == true) { if
tdxPl:buffer std_logic_vector(3 downto 0)。 倒计时显示东西方向人行道所亮灯剩余时间。 tnbh:BUFFER STD_LOGIC_VECTOR(6 DOWNTO 4)。 tnbl:BUFFER STD_LOGIC_VECTOR(3 downto 0)。 倒计时显示南北方向所亮灯剩余时间。 tnbph:buffer std_logic_vector(8
T_R2。 reg clk2。 reg [7:0] passed。 reg [7:0] alarmed。 /*输入与输出的声明部分,其中, clk0 为输入的时钟信号, resetb 为密码舒服的输入信号,key 为输入命令, 需注意的时, key 并不是总在表示密码,也表示密码的间隔,如当输入 4 位密码后需要一个确认“ enter”信号, 当密码输入错误时,需要取消“ cancel”信号
Click() If = True Then = False End If = 9600,N,8,1 = 1 = True = 0 End Sub Private Sub Command2_Click() Call CommPortClose intCommFlag = 0 End Sub Call FileSendManager(0) intCommFlag = 1 End If