Verilog VHDL 曼彻斯特编码器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.5.什么叫“综合”?一般“综合”包含哪些过程?
答:在电子设计领域中“综合”的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
综合包含的过程:对VHDL或Verilog HDL进行处理分析,并将其转换成电路结构或模块,这时不考虑实际器件实现,即完全与硬件无关,这个过程是一个通用电路原理图形成的过程:第2步,对实际实现目标器件的结构进行优化,并使之满足各种约束条件,优化关键路径,等等。
2.10 使用Quartus II的 Mega Wizard Plug-In Manager宏功能模块中的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)
提示:曼彻斯特码(Manchester Code)又称为数字双相码或分相码(Split-phase Code)。它的编码规则是:用分别持续半个码元周期的正(高)、负(低)电平组合表示信码“1”;用分别持续半个码元周期的负(低)、正(高)电平组合表示信码“0”。
图题3.20 用倍频时钟设计Manchester Code
图题3.20 用双时钟设计Manchester Code 的仿真结果
hsu_manchester_code_v
module hsu_manchester_code_v ( clk,clk_d,clk_dn,data_s,
clk_lock_in,mcode_out); input clk,clk_d,clk_dn,data_s,clk_lock_in;
output mcode_out;
reg mcode_out;
reg temp_mcode_out;
reg temp_mcode_out_ddn;
always @ ( posedge clk or posedge clk_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 @ ( posedge clk or posedge clk_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 @ ( posedge clk or posedge clk_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) 。
实体部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.ning_bpac.ALL;
ENTITY ning_peakdetect IS
PORT(data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
clk,set: IN STD_LOGIC;
dataout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END ning_peakdetect ;
ARCHITECTURE peakdetect_behave OF ning_peakdetect IS
SIGNAL peak: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
dataout<=peak;
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
IF (set='1' ) THEN
peak<=data;
ELSE
peak<=max(data , peak);
END IF;
END IF;
END PROCESS;
END;
函数部分
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
PACKAGE ning_bpac IS
FUNCTION max(a: STD_LOGIC_VECTOR;
b: STD_LOGIC_VECTOR)
RETURN STD_LOGIC_VECTOR;
END ning_bpac;
PACKAGE BODY ning_bpac IS
FUNCTION max(a: STD_LOGIC_VECTOR;
b: STD_LOGIC_VECTOR)
RETURN STD_LOGIC_VECTOR IS
VARIABLE temp: STD_LOGIC_VECTOR(a'RANGE); BEGIN
IF (a>b) THEN
temp:=a;
ELSE
temp:=b;
END IF;
RETURN temp;
END max;
END ning_bpac;