信号与信息处理研究生作业.docx

上传人:b****8 文档编号:29369628 上传时间:2023-07-22 格式:DOCX 页数:35 大小:254.10KB
下载 相关 举报
信号与信息处理研究生作业.docx_第1页
第1页 / 共35页
信号与信息处理研究生作业.docx_第2页
第2页 / 共35页
信号与信息处理研究生作业.docx_第3页
第3页 / 共35页
信号与信息处理研究生作业.docx_第4页
第4页 / 共35页
信号与信息处理研究生作业.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

信号与信息处理研究生作业.docx

《信号与信息处理研究生作业.docx》由会员分享,可在线阅读,更多相关《信号与信息处理研究生作业.docx(35页珍藏版)》请在冰豆网上搜索。

信号与信息处理研究生作业.docx

信号与信息处理研究生作业

2009研究生VHDL作业习题

题目一、请分别画出如下VHDL程序所描述的一个电路模型。

(1)

Process(CLK)

Begin

if(CLK'eventandCLK'1')then

X<=AandB;

Y<=X;

Z<=Y;

Endif;

EndProcess;

(2)

Process(CLK)

VariableX,Y:

std_logic;

Begin

If(CLK'eventandCLK'1')then

X:

=AandB;

Y:

=X;

Z<=Y;

Endif;

EndProcess;

(3)

Process(CLK)

Begin

if(CLK'eventandCLK'1')then

Z<=Y;

Y<=X;

X<=AandB;

Endif;

EndProcess;

(4)

Process(CLK)

VariableX,Y:

std_logic;

Begin

If(CLK'eventandCLK'1')then

Z<=Y;

Y:

=X;

X:

=AandB;

Endif;

EndProcess;

解答:

信号用于说明全局变量,变量用于说明局部量。

信号和变量值的代入不仅形式不同,而且其操作过程也不同。

在变量的赋值语句中,该语句一旦被执行,其值立即被赋予变量。

在执行下一条语句时,该变量的值就为上一句新赋的值。

在信号的赋值语句中,该语句即使被执行也不会使信号立即发生代入。

下一条语句执行时,仍使用原来的信号值。

直到进程结束之后,所有信号代入语句的实际代入才顺序进入处理。

其VHDL描述的电路如下:

(1)

(2)

(3)

(4)

题目二、采用SR锁存器可实现时钟信号的双相化,其如图所示,请画出其对应输入的输出波形,并指出其特征。

解答:

由于输出端NQ和Q又反馈到电路中作为输入,所以为了区别开,我们用NQ(n-1)和Q(n-1)表示前一状态,用NQ(n)和Q(n)表示现态,则NQ(n)和Q(n)可表示如下:

假设各个门的时延是相同的,则根据该锁存器的电路得到各信号波形如下所示:

 

串并转换相加器

要求

1)画出系统的功能框图并给出设计思想

2)用VHDL或Verilog写出代码

3)进行设计实现,写出设计实验报告

电路的输入/输出信号如下:

输入信号:

●Clock:

时钟信号;

●Reset:

reset信号;

●S_data_en:

数据有效信号,当该信号为高电平时,串行数据为有效数据;

●Data_a,data_b:

串行数据,当s_data_en为高时,在data_a,data_b上将一次传送从低位开始的8位数据。

输出信号:

●Out_en:

输出数据使能信号;

●Result[7..0]:

8比特相加结果;

●Result_ca:

进位信号;

解:

分析实验:

该电路由2个8位串并转化器和一个8位加法器组成,如图:

 

 

对于串并转换电路,采用有限状态机来实现。

因为系统有复位状态,所以可以从复位状态开始设计,令复位状态为起始状态S0。

下面给出该状态的文字描述:

S0:

系统复位状态。

电路为同步复位,因此,如果输入复位信号reset(高电平)有效,无论此时输入信号data为何值,在时钟上升沿,系统进入复位状态S0。

系统将保持在此状态值直到串并转换开始信号s_data_en有效(高电平)为止。

在S0状态,输出信号out_en为低电平,表示并行数据输出端result上的是无效信号。

如果在某个时钟周期复位信号reset无效(低电平),并且串并转换信号s_data_en有效,则在系统后面的8个时钟周期接收外部串行数据输入,此时系统进入一个新状态,记为S1。

S1:

系统接收第一位串行数据状态。

如果当前状态为S0,并当复位信号reset无效(低电平),串并转换开始信号s_data_en有效(高电平)时,系统进入这一状态;如果当前状态为S9,复位信号无效(低电平)并且串并转换开始信号s_data_en有效(高电平),系统也进入这一状态。

在S1状态下,系统在每个时钟上升沿将外部输入的串行数据锁存,输出信号out_en依然为低电平,表明系统正在进行串并转换中,并行数据输出端result上的是无效信号。

如果在S1状态出现复位信号reset有效(高电平),则系统转至复位状态S0,否则,系统进入下一个状态S2。

S2:

系统接收第二位串行数据状态。

在状态S1,如果输入复位信号reset无效(低电平),在下一个时钟周期,系统接收第二位串行数据输入,系统进入此状态。

在S2状态,输出信号out_en依然为低电平,表明此时系统正在进行串并信号转换中,并行信号输出端result上的值是无效信号。

如果在S2状态出现复位信号reset有效(高电平),则系统转至复位状态S0,否则,系统在下个时钟周期开始接收第三位串行数据输入,并且系统进入新状态S3。

S3:

系统接收第三位串行数据状态。

在状态S2,如果输入复位信号reset无效(低电平),在下一个时钟周期,系统接收第三位串行数据输入,系统进入此状态。

在S3状态,输出信号out_en依然为低电平,表明此时系统正在进行串并信号转换中,并行信号输出端result上的值是无效信号。

如果在S3状态出现复位信号reset有效(高电平),则系统转至复位状态S0,否则,系统在下个时钟周期开始接收第四位串行数据输入,并且系统进入新状态S4。

S4:

系统接收第四位串行数据状态。

在状态S3,如果输入复位信号reset无效(低电平),在下一个时钟周期,系统接收第四位串行数据输入,系统进入此状态。

在S4状态,输出信号out_en依然为低电平,表明此时系统正在进行串并信号转换中,并行信号输出端result上的值是无效信号。

如果在S4状态出现复位信号reset有效(高电平),则系统转至复位状态S0,否则,系统在下个时钟周期开始接收第五位串行数据输入,并且系统进入新状态S5。

接下来的S5,S6,S7三个状态都同S3,S4一样,一直到S8状态。

S8:

系统接收第八位串行数据状态。

在状态S8,如果输入复位信号reset无效(低电平),在下一个时钟周期,系统接收第八位串行数据输入,系统进入此状态。

在S8状态,输出信号out_en依然为低电平,表明此时系统正在进行串并信号转换中,并行数据输出端result上的值是无效信号。

如果在S8状态出现复位信号reset有效(高电平),则系统转至复位状态S0,否则,系统在下个时钟周期将接收到的八位串行数据通过并行数据输出端result输出,并且系统进入新状态S9。

S9:

系统将八位串行数据并行输出状态。

在状态S8,如果输入复位信号reset无效(低电平),在下一个时钟周期,系统接收到的八位串行数据通过并行数据输出端result输出8位并行数据,系统进入此状态。

在S9状态,输出信号out_en为高电平,表明此时系统串并信号转换完成,并行数据输出端result上的值是有效信号。

如果在S9状态中出现复位信号reset有效(高电平),则系统转至复位状态S0;如果在S9状态复位信号reset信号无效(低电平)并且不出现串并转换开始信号,即s_data_en无效(低电平),系统下个时钟周期也进入复位状态S0;如果复位信号reset无效(低电平),并且串并转换开始信号s_data_en有效(高电平),则下个状态开始接收第一位串行数据输入,系统进入S1状态。

根据以上分析,可写出串并转换模块的VHDL代码为:

entityseries_parallelis

Port(clk:

instd_logic;

reset:

instd_logic;

start:

instd_logic;

data:

instd_logic;

done:

outstd_logic;

result:

outstd_logic_vector(7downto0));

endseries_parallel;

architectureBehavioralofseries_parallelis

typestateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9);

signalcurrent_state:

state:

=s0;

signalnext_state:

state;

begin

nxtstate:

process(clk)

begin

if(clk'eventandclk='1')then

current_state<=next_state;

endif;

endprocessnxtstate;

control:

process(current_state,reset,start)

variableshift:

std_logic_vector(7downto0):

="00000000";

begin

casecurrent_stateis

whens0=>

if(reset='0'andstart='1')then

next_state<=s1;

done<='0';

else

next_state<=s0;

endif;

whens1=>

if(reset='0'andstart='1')then

next_state<=s2;

done<='0';

shift:

=shift(6downto0)&data;

elsif(reset='1')then

next_state<=s0;

endif;

whens2=>

if(reset='0'andstart='1')then

next_state<=s3;

done<='0';

shift:

=shift(6downto0)&data;

elsif(reset='1')then

next_state<=s0;

endif;

whens3=>

if(reset='0'andstart='1')then

next_state<=s4;

done<='0';

shift:

=shift(6downto0)&data;

elsif(reset='1')then

next_state<=s0;

endif;

whens4=>

if(reset='0'andstart='1')then

next_state<=s5;

done<='0';

shift:

=shift(6downto0)&data;

elsif(reset='1')then

next_state<=s0;

endif;

whens5=>

if(reset='0'andstart='1')then

next_state<=s6;

done<='0';

shift:

=shift(6downto0)&data;

elsif(reset='1')then

next_state<=s0;

endif;

whens6=>

if(reset='0'andstart='1')then

next_state<=s7;

done<='0';

shift:

=shift(6downto0)&data;

elsif(reset='1')then

next_state<=s0;

endif;

whens7=>

if(reset='0'andstart='1')then

next_state<=s8;

done<='0';

shift:

=shift(6downto0)&data;

elsif(reset='1')then

next_state<=s0;

endif;

whens8=>

if(reset='0'andstart='1')then

next_state<=s9;

done<='0';

shift:

=shift(6downto0)&data;

elsif(reset='1')then

next_state<=s0;

endif;

whens9=>

if(reset='0'andstart='1')then

next_state<=s1;

done<='1';

result<=shift;

elsif(reset='1'orstart='0')then

next_state<=s0;

endif;

endcase;

endprocesscontrol;

endBehavioral;

对串并转换模块进行仿真,可知其能实现要求的功能。

图2.串并转换模块的仿真波形

八位带进位的加法器模块

八位带进位的加法器模块的VHDL代码如下:

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entityadd8is

port(data_a:

instd_logic_vector(7downto0);

data_b:

instd_logic_vector(7downto0);

in_en:

instd_logic;

out_en:

instd_logic;

result:

outstd_logic_vector(7downto0);

result_ca:

outstd_logic);

endadd8;

architectureBehavioralofadd8is

signala,b,temp:

std_logic_vector(8downto0);

begin

process(data_a,data_b,in_en,out_en)

begin

a<='0'&data_a(7downto0);

b<='0'&data_b(7downto0);

ifin_en='1'then

temp<=a+b;

endif;

ifout_en='1'then

result(7downto0)<=temp(7downto0);

result_ca<=temp(8);

endif;

endprocess;

endBehavioral;

对八位带进位的加法器模块进行仿真,可知其能实现要求的功能。

图3.八位带进位的加法器模块仿真的波形

顶层模块

图4.顶层模块(top)原理图

图5.顶层模块(top)的仿真波形

小结

由各个功能模块及最后顶层模块的仿真可以看出,此电路可由有限状态机很好地实现。

当复位信号reset无效(低电平),且串行数据为有效(高电平)时,两个分别输入的串行数据分别为data_a和data_b,进行串并转换并相加后,在输出数据使能信号out_en有效(高电平)时,由result(7:

0)输出8bit的相加结果

 

随机数发生器的原理分析与设计实现

一、问题说明:

随机数发生器可产生两个随机数,由一开关(RIN)进行控制,RIN为1时随机数发生器被清除,RIN为0时随机数发生器将产生1-6的两个随机数,可由LED数码管显示。

二、设计实验要求

1.根据给出的逻辑电路图(附在题后),自行分析该随机数发生器的逻辑功能(可借助仿真工具进行人机交互的功能仿真和分析)。

2.利用图形或VHDL语言,采用相应的EDA工具,进行设计输入、功能仿真及设计实现等,最后进行数据下载和硬件功能检验。

3.写电路的设计实验和原理分析报告。

三、实验步骤

1.原理图分析

(1)顶层图分析

该实验用到的顶层图如下所示:

在顶层图模块中,时钟信号CLK和触发信号IPAD作为输入,输出八位并行数据在七段数码显示管上显示。

对顶层模块仿真,得到波形如下:

从仿真图中可以看出,在触发信号IPAD的触发下,该模块能产生随机数,说明该模块功能正确。

下面分别对顶层模块中的每一个小模块的功能进行分析。

(2)ROLL模块

ROLL模块的电路原理图如下所示

其中IFD和FD模块是ISE软件自带的模块,二者均是D触发器,其真值表相同,如下所示:

对该模块进行仿真,得到仿真图如下所示:

由子模块真值表和电路图以及仿真结果分析可知,ROLL模块的功能是:

将输入持续高电平信号延迟一个时钟输出,而且输出的高电平持续时间少一个时钟周期。

(3)MUXCON模块

ROLL模块的电路原理图如下所示

该原理图中,CB2RE也是ISE软件自带模块,它是一个2-bit同步计数器。

其真值表如下:

Input

Output

R

CE

C

Q1Q0

1

×

0

0

0

×

保持

0

1

加1

在MUXCON原理图中,将CE接高电平,这样该模块的输出处于清零和加状态,输出的SO和S1作为数码显示管的片选信号。

对该模块仿真,结果如下:

从仿真图中我们可以看出,当RL为低电平时,S1S0依次为00、01、10、11,在RL为高电平时清零。

(4)RANDOM模块

RANDOM模块是核心模块,它的原理图如下:

该模块调用了两个DICK子模块,DICK模块的电路原理图如下:

对DICK原理图进行仿真,结果如下:

从仿真图中可以看出,在RL处于高电平期间,由e0、e1、e2三个输出口产生随机数。

因此RANDOM模块的功能也是产生随机数。

对RANDOM模块进行仿真,得到仿真波形如下:

从仿真图中可以看到,在RL为高电平时,该模块输出六位随机数。

(5)SELECT模块

SELECT模块的电路原理图如下所示:

对该模块进行仿真,得仿真波形图如下:

由该仿真图可以看出,该模块是一个数据选择器,其真值表如下:

Input

Output

S1

S0

O3O2O1

0

0

000

0

1

000

1

0

B3B2B1

1

1

A3A2A1

(6)7SEG模块

7SEG模块是一个七段数码管译码器,其电路原理图如下:

I1,I2,I3为输入端,A,B,C,D,E,F,G为输出端。

对该模块进行仿真,得到仿真波形如下所示:

以其中一组波形分析,当输入i3i2i1为010时,输出abcdefg为0010010,对应七段数码管如下:

数码管上显示的2与输入的010能正确对应。

2.下载运行

顶层模块仿真正确后就可以将该模块转化成.bit二进制文件,下载到FPGA芯片中运行。

由于实验中使用的是Xilinx公司的spartanⅢ,内部时钟位50MHz,为了是数码管能稳定显示数据,需要对该频率进行分频,实验证明采取50000分频能观察到理想的结果。

分频模块的vhdl语言描述如下:

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

----Uncommentthefollowinglibrarydeclarationifinstantiating

----anyXilinxprimitivesinthiscode.

--libraryUNISIM;

--useUNISIM.VComponents.all;

entityfdiv50kis

Port(clk:

instd_logic;

clkout:

outstd_logic);

endfdiv50k;

architectureBehavioraloffdiv50kis

signalclk_temp:

std_logic:

='0';

signalcounter:

integer:

=1;

begin

process(clk)

begin

if(clk'eventandclk='1')then

if(counter=50000)then

counter<=1;

clk_temp<=notclk_temp;

else

counter<=counter+1;

endif;

endif;

endprocess;

clkout<=clk_temp;

endBehavioral;

交通灯控制器的设计与实现

1.问题说明

该交通灯系统为一个十字路口交通管理信号灯,用于主干道与乡间公路的交叉路口,要求是优先保证主干道的畅通,因此平时处于“主干道绿灯,乡间道红灯”状态,只有在乡间公路有车辆要穿行主干道时才将交通灯切向“主干道红灯,乡间道绿灯”,一旦乡间公路无车辆通过路口,交通灯又回到“主绿,乡红”的状态。

此外,主干道每次通行的时间不得短于1分钟,乡间公路每次通行时间不得长于20秒。

而在两个状态交换过程中出现的“主黄,乡红”和“主红,乡黄”状态,持续时间都为4秒。

2.实验要求

(1)根据以上说明,画出逻辑电路图。

(2)利用VHDL语言,在相应的EDA工具上进行设计输入、功能仿真及设计实现,最后对所选的FPGA进行数据下载和检验。

(3)写出设计实验报告。

3.实验步骤及分析

(1)设计方案

交通灯的状态转换规律如图所示:

乡有车

S=1

主绿,乡红

主黄,乡红

4秒

4秒

主红,乡绿

主红,乡黄

乡无车

S=0

图1.交通灯的状态转换规律

乡间公路有车辆欲穿行路口时,应向交通灯控制器发一个请求信号S,这可以由乡间公路右侧埋设的传感器产生。

由于系统的运行有4个状态,因而控制器也应有4个状态。

系统的6个输出各与一定的状态相对应,只要通过一些门电路即可完成对信号灯的控制,但由于信号灯的功率一般都很大,所以在每盏灯前

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1