VerilogVHDL曼彻斯特编码器.docx
- 文档编号:26502729
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:13
- 大小:94.49KB
VerilogVHDL曼彻斯特编码器.docx
《VerilogVHDL曼彻斯特编码器.docx》由会员分享,可在线阅读,更多相关《VerilogVHDL曼彻斯特编码器.docx(13页珍藏版)》请在冰豆网上搜索。
VerilogVHDL曼彻斯特编码器
1.5.什么叫“综合”?
一般“综合”包含哪些过程?
答:
在电子设计领域中“综合”的概念可以表示为:
将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
综合包含的过程:
对VHDL或VerilogHDL进行处理分析,并将其转换成电路结构或模块,这时不考虑实际器件实现,即完全与硬件无关,这个过程是一个通用电路原理图形成的过程:
第2步,对实际实现目标器件的结构进行优化,并使之满足各种约束条件,优化关键路径,等等。
2.10使用QuartusII的MegaWizardPlug-InManager宏功能模块中的PLL设计一个能实现图题2.10波形的电路元件(包括一个VHDL文件和一个*.bsf原理图图标)。
其中:
inclk0为电路的主频输入端,频率为50MHz;areset为异步置位端,c2和主频inclk0同频率。
c1为主频inclk0的倍频输出信号。
C0为c2的反相信号。
Locked为相位控制信号,也是输出使能控制信号。
(2014am)
3.20试用VHDL语言设计一个曼彻斯特编码器。
已知有时钟信号clk_d、时钟的倍频信号clk及时钟的反相信号clk_dn。
串行数据输入为data_s,编码输出为mcode_out,输出使能信号为clk_lock_in,高电平有效(2012am)(2013am)(2014am)
提示:
曼彻斯特码(ManchesterCode)又称为数字双相码或分相码(Split-phaseCode)。
它的编码规则是:
用分别持续半个码元周期的正(高)、负(低)电平组合表示信码“1”;用分别持续半个码元周期的负(低)、正(高)电平组合表示信码“0”。
图题3.20用倍频时钟设计ManchesterCode
图题3.20用双时钟设计ManchesterCode的仿真结果
hsu_manchester_code_v
modulehsu_manchester_code_v(clk,clk_d,clk_dn,data_s,
clk_lock_in,mcode_out);
inputclk,clk_d,clk_dn,data_s,clk_lock_in;
outputmcode_out;
regmcode_out;
regtemp_mcode_out;
regtemp_mcode_out_ddn;
always@(posedgeclkorposedgeclk_lock_in)
begin
if(clk_lock_in==1'b1)
if(data_s==1'b1)
temp_mcode_out<=clk_d;
else
temp_mcode_out<=1'b0;
else
temp_mcode_out=1'b0;
end
always@(posedgeclkorposedgeclk_lock_in)
begin
if(clk_lock_in==1'b1)
if(data_s==1'b0)
temp_mcode_out_ddn<=clk_dn;
else
temp_mcode_out_ddn<=1'b0;
else
temp_mcode_out_ddn=1'b0;
End
always@(posedgeclkorposedgeclk_lock_in)
begin
if(clk_lock_in==1'b1)
mcode_out<=temp_mcode_out;
temp_mcode_out_ddn;
else
mcode_out<=1'b0;
end
endmodule
3.21试用VHDL语言设计一个求两个数中最大值的程序,要求用函数调用的方法设计。
其中:
data为输入信号,位宽8bit,dataout为最大值输出,位宽8bit。
Clk为时钟信号。
设计一位控制信号set,当set为低电平时,输出data和peak中的最大值。
(2013am)2014am)。
实体部分
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEWORK.ning_bpac.ALL;
ENTITYning_peakdetectIS
PORT(data:
INSTD_LOGIC_VECTOR(7DOWNTO0);
clk,set:
INSTD_LOGIC;
dataout:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDning_peakdetect;
ARCHITECTUREpeakdetect_behaveOFning_peakdetectIS
SIGNALpeak:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
dataout<=peak;
PROCESS(clk)
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(set='1')THEN
peak<=data;
ELSE
peak<=max(data,peak);
ENDIF;
ENDIF;
ENDPROCESS;
END;
函数部分
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
PACKAGEning_bpacIS
FUNCTIONmax(a:
STD_LOGIC_VECTOR;
b:
STD_LOGIC_VECTOR)
RETURNSTD_LOGIC_VECTOR;
ENDning_bpac;
PACKAGEBODYning_bpacIS
FUNCTIONmax(a:
STD_LOGIC_VECTOR;
b:
STD_LOGIC_VECTOR)
RETURNSTD_LOGIC_VECTORIS
VARIABLEtemp:
STD_LOGIC_VECTOR(a'RANGE);
BEGIN
IF(a>b)THEN
temp:
=a;
ELSE
temp:
=b;
ENDIF;
RETURNtemp;
ENDmax;
ENDning_bpac;
3.22试用VHDL语言设计一个8位二进制加计数器。
其中:
qout为8位二进制输出,cout为进位输出,clr为同步清零端,当clr为高电平时清零、低电平时工作。
Cipher为8位密码控制输入端,其控制功能如下表所示:
(2014am)
cipher功能
00001111加计数
11110000减计数
11001100停止计数
11111111停止计数并且输出BCD码
要求:
1.设计一个计数分频器,输入频率clk为50Mhz,输出频率newclk为1hz。
newclk为计数器的计数频率。
2.编写一个把二进制转换为整数的函数。
3.当停止计数时,调用上述函数用整数除法把二进制数转换为BCD码。
(2014am)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Updowncnt8 IS
PORT (clk,clr:
IN STD_LOGIC;
cipher:
IN STD_LOGIC_VECTOR(7 DOWNTO 0);
cout:
OUT STD_LOGIC;
q:
BUFFER INTEGER RANGE 0 TO 15);
END Updowncnt8;
ARCHITECTURE one OF Updowncnt8 IS
BEGIN
PROCESS(clk,clr)
BEGIN
IF clk'EVENT AND clk='1' THEN
IF clr ='0' THEN
CASE cipher IS
WHEN "00001111"=>
IF q=15 THEN q<=0;
cout<='0';
ELSIF q=14 THEN q<=q+1;
cout<='1';
ELSE q<=q+1;
END IF;
WHEN "11110000"=>
IF q=0 THEN q<=15;
cout<='0';
ELSIF q=1 THEN q<=q-1;
cout<='1';
ELSE q<=q-1;
END IF;
WHEN "11001100"=>
NULL;
WHEN "11111111"=>
NULL;
WHEN OTHERS =>
NULL;
END CASE;
ELSIF clr ='1' THEN
q<=0;
END IF;
END IF;
END PROCESS;
END one;
4.148线-3线优先编码器CD4532功能表如表4.1a所示,试用VerilogHDL语言实现该8线-3线优先编码器。
(2011am)(2011gam)(2012am)(2013am)
(2014am)
modulecoder_8(y,a);
input[7:
0]a;
output[2:
0]y;
reg[2:
0]y;
always@(a)
begin
if(~a[7])y='b111;
elseif(~a[6])y='b110;
elseif(~a[5])y='b101;
elseif(~a[4])y='b100;
elseif(~a[3])y='b011;
elseif(~a[2])y='b010;
elseif(~a[1])y='b001;
elsey='b000;
end
endmodule
表4.1a8线-3线优先编码器CD4532功能表(P109.例题4.6)
4.15把下列VHDL程序改写成VerilogHDL语言,并且用QuartusⅡ通过编译。
(2014am)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhsu_count6_updownIS
PORT(CLK,RST,ENA:
INSTD_LOGIC;
OUTY:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC;
cipher:
INSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDhsu_count6_updown;
ARCHITECTUREbehave_cnt6OFhsu_count6_updownIS
SIGNALCQI:
STD_LOGIC_VECTOR(3DOWNTO0):
="0000";
SIGNALflag1_2:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALcipher_temp:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
cipher_temp<=cipher;
P_COUNT10_VT:
PROCESS(CLK,RST,ENA)
BEGIN
IFRST='1'THENCQI<="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
if(flag1_2="00")then
IFCQI<5THEN
CQI<=CQI+1;
ELSE
CQI<="0000";
ENDIF;
elsif(flag1_2="01")then
IFCQI>0THEN
CQI<=CQI-1;
ELSE
CQI<="0101";
ENDIF;
endif;
ENDIF;
ENDIF;
OUTY<=CQI;
IF(flag1_2="00")THEN
COUT<=NOT(CQI
(2)ANDCQI(0));
ELSIF(flag1_2="01")THEN
COUT<=CQI(3)ORCQI
(2)ORCQI
(1)ORCQI(0);
ENDIF;
ENDPROCESSP_COUNT10_VT;
p1:
Process(clk,cipher_temp)
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(cipher_temp="00001111")THEN
flag1_2<="00";
ELSIF(cipher_temp="11110000")THEN
flag1_2<="01";
ELSIF(cipher_temp="11001100")THEN
flag1_2<="10";
ENDIF;
ENDIF;
ENDPROCESSp1;
P2_stop:
Process(clk,flag1_2,CQI)
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(flag1_2="10")THEN
CQI<=CQI;
ENDIF;
ENDIF;
ENDPROCESSp2_stop;
ENDbehave_cnt6;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VerilogVHDL 曼彻斯特 编码器