课程《FPGA技术及应用》作业分享(合肥工业大学仪器学院)

合工大测控系教学

作业一

1. 简述EDA技术的发展进程。简要叙述什么是EDA技术。

EDA技术(Electronic Design Automation)是一种用于电子产品设计与制造的软件工具。 EDA技术的发展进程:

  • 1960年代:开发出第一代EDA工具,用于电路设计与模拟。
  • 1970年代:EDA工具发展到第二代,支持二维自动布线,提高了电路设计的效率。
  • 1980年代:EDA工具进入第三代,支持三维模型视图,提供了更为直观的设计方式。
  • 1990年代:EDA工具发展到第四代,支持设计自动化,实现了设计流程的一体化管理。
  • 2000年代:EDA工具进入第五代,支持大规模集成电路设计与模拟,实现了设计效率的进一步提高。
  • 2010年代:EDA工具发展到第六代,支持智能化设计,实现了更快更准确的电路设计。

经过几十年的发展,EDA技术已经成为电子产品设计与制造的必要工具,为电子产品的高效制造与研发提供了支持。
建议以PPT为准

2. 列举HDL和C语言的异同点。

HDL和C语言的异同点如下:
相同点:

  • 两者都是编程语言,用于描述计算机程序的执行过程。
  • 两者都支持程序的编写、编译、执行等基本操作。
  • 两者都有严格的语法规则,需要程序员根据规则进行编写。

不同点

  • HDL是电子系统设计的高级语言,用于描述电子系统的逻辑运算与时序控制。C语言是通用编程语言,用于描述各种计算机程序的执行过程。
  • HDL支持与硬件设计相关的语法,如信号、连接、时序等。C语言支持一般的程序设计语法,如变量、运算符、循环等。
  • HDL的程序通常用于电子系统的设计与模拟,最终经过综合生成硬件电路。C语言的程序通常用于计算机程序的编写,最终经过编译生成可执行文件。

3. 简要说明编译器和综合功能异同。

编译器和综合器是两种不同的软件工具,用于实现不同的功能。

编译器是用于将高级语言程序编译成目标语言(如机器语言)的软件工具。编译器通常用于将高级语言程序编译成机器语言程序,并在计算机上执行。

综合器是用于将电子系统设计模型综合成电路模型的软件工具。综合器通常用于将电子系统设计模型综合成电路模型,并输出电路图、布线表等文件。

编译器和综合器的异同点如下:

  • 相同点:

    • 两者都是用于转换高级语言程序的软件工具。
    • 两者都需要编写者按照规定语法进行编写。
    • 两者都需要经过编译生成最终的结果。
  • 不同点:

    • 编译器的输入是高级语言程序,输出是目标语言程序。综合器的输入是电子系统设计模型,输出是电路模型。
    • 编译器通常用于高级语言程序的编译,综合器通常用于电子系统设计的综合。
    • 编译器的编译过程通常只包括一次编译,而综合器的综合过程通常包括多次综合,包括语法检查、布线、模拟等多个步骤。
    • 编译器的目标语言通常是机器语言,用于计算机上执行。综合器的输出通常是电路模型,用于生成电路图和布线表等文件。

4. 什么是综合?有哪些类型?

综合是指用电子设计自动化(EDA)工具将电子系统设计模型转换成电路模型的过程。综合包括多个步骤,如语法检查、布线、模拟等。

常见的综合类型如下:

  • 语法检查综合:用于检查电子系统设计模型的语法是否正确,并输出错误提示信息。
  • 布线综合:用于将电子系统设计模型中的逻辑运算与信号连接转换成电路的布线信息,并输出布线表等文件。
  • 模拟综合:用于将电子系统设计模型模拟成电路运行,并输出电路的时序信息、信号波形等数据。
  • 验证综合:用于检查电子系统设计模型是否符合设计规范和需求,并输出验证报告等文件。
  • 电路优化综合:用于对电子系统设计模型进行优化,提高电路的性能、效率和可靠性。
  • 资源分配综合:用于为电子系统设计模型中的逻辑运算、信号连接、时序控制等资源分配硬件资源,以实现电路的自动布线。
  • 时钟综合:用于为电子系统设计模型中的时序控制分配时钟信号,以控制电路的运行速度和同步性。
  • 集成电路综合:用于将多个电子系统设计模型集成成大规模集成电路,并输出电路图、布线表、模拟报告等文件。
  • 板级综合:用于将多个集成电路集成成电子系统板卡,并输出板卡原理图、

5. 解释编程和配置两个概念。

在电子设计自动化(EDA)技术中,编程和配置是两个重要的概念。
编程是指用编程语言编写计算机程序的过程。编程通常用于描述计算机程序的执行过程,并在计算机上运行编写的程序。
配置是指对电子系统或集成电路进行参数设置、信号连接、时序控制等操作,使其能够按照设计要求运行的过程。配置通常用于将电子系统或集成电路的设计模型转换成实际的电路,并在电子设备上运行。
编程和配置的区别在于,编程是通过编写程序描述计算机程序的执行过程,而配置是通过对电子系统或集成电路进行参数设置、信号连接、时序控制等操作,使其能够按照设计要求运行。

建议以PPT上的内容为准。

6. 在FPGA和CPLD的应用开发中应考虑哪些因素?

FPGA和CPLD的应用开发中,应考虑以下因素:

  • 功能需求:需要考虑应用的功能需求,选择合适的FPGA或CPLD芯片。
  • 硬件资源:需要考虑FPGA或CPLD芯片的硬件资源,确定逻辑门数、存储器容量、输入输出端口等参数。
  • 软件工具:需要考虑FPGA或CPLD的编程语言和综合软件,确定编写程序和综合电路的方式。
  • 电路性能:需要考虑FPGA或CPLD的电路性能,如工作频率、布线延迟、时钟噪声等。
  • 封装形式:需要考虑FPGA或CPLD的封装形式,选择合适的封装方式,方便与其他电路连接。
  • 工艺技术:需要考虑FPGA或CPLD的工艺技术,确定芯片的工艺流程和性能指标。
  • 供应商支持:需要考虑FPGA或CPLD的供应商支持,选择专业、可靠的供应商,以保证芯片的质量和技术支持。
  • 成本效益:需要考虑FPGA或CPLD的成本效益,确定芯片的采购成本和使用成本,并与其他芯片进行比较,选择性价比较高的芯片。

作业二

1、说明端口模式INOUT和BUFFER有何异同点。

端口模式INOUT和BUFFER是FPGA中的两种端口模式,它们的异同点如下:

  • 相同点:
    • INOUT和BUFFER两者都是FPGA中的端口模式,用于定义FPGA芯片的输入输出端口。
    • INOUT和BUFFER两者都需要指定端口的名称、类型和宽度,以定义FPGA芯片的输入输出端口。
    • INOUT和BUFFER两者都可以连接FPGA芯片的外部电路,实现FPGA芯片与外部电路的信号交互。
  • 不同点:
    • INOUT端口是双向端口,既可以用作输入端口,也可以用作输出端口。而BUFFER端口区别在于当需要读入数据时,只允许内部回读内部产生的输出信号,即反馈。举个例子,设计一个计数器的时候可以将输出的计数信号定义为BUFFER,这样回读输出信号可以做下一计数值的初始值。

2、简要说明GAL是怎样实现可编程组合电路与时序电路的。

仅供参考,以PPT为准
GAL(Generic Array Logic)是一种可编程逻辑器件,可以用来实现可编程组合电路和时序电路。

GAL器件内部包含了一些可编程的逻辑块,每个逻辑块都有自己的输入和输出端口,可以用来实现基本的逻辑运算和时序控制。GAL器件还包含了一些可编程的通路,可以用来连接不同的逻辑块,实现复杂的电路连接和跨逻辑块的信号传输。

GAL器件的可编程功能,使得它可以实现多种不同的电路功能,包括可编程组合电路和时序电路。

3、Cyclone器件中的本地互连通路和直接连接通路有什么不同?

Cyclone器件中的本地互连通路和直接连接通路有以下不同:

  • 本地互连通路是指Cyclone器件内部的通路,可以在同一个逻辑块中实现信号的传输。本地互连通路一般用于实现基本的逻辑运算和时序控制。
  • 直接连接通路是指Cyclone器件内部的通路,可以在不同的逻辑块中实现信号的传输。直接连接通路一般用于实现复杂的电路连接和跨逻辑块的信号传输。
  • 本地互连通路的传输范围局限于同一个逻辑块中,而直接连接通路的传输范围可以跨越多个逻辑块。
  • 本地互连通路的传输速度一般较快,可以满足大多数应用的要求,而直接连接通路的传输速度取决于布线的质量和复杂度,一般不如本地互连通路的传输速度快。

4、表达式C<=A+B中,A、B和C的数据类型都是STD_LOGIC_VECTOR,是否能直接进行加法运算?说明原因和解决方法。

在表达式C<=A+B中,由于A、B和C的数据类型都是STD_LOGIC_VECTOR,所以不能直接进行加法运算。

原因在于,STD_LOGIC_VECTOR类型的数据不能直接进行算术运算,必须通过特定的方法进行转换才能进行加法运算。

解决方法可以采用以下几种:

  • 使用类型转换函数将STD_LOGIC_VECTOR类型的数据转换为整数类型的数据,然后进行加法运算。
  • 使用类型转换函数将STD_LOGIC_VECTOR类型的数据转换为双精度浮点数类型的数据,然后进行加法运算。
  • 使用VHDL内置的算术函数,如signed和unsigned函数,将STD_LOGIC_VECTOR类型的数据转换为可进行加法运算的数据类型,然后进行加法运算。
  • 使用VHDL内置的算术运算符,如SLL和SRL运算符,将STD_LOGIC_VECTOR类型的数据转换为可进行加法运算的数据类型,然后进行加法运算。

5、VHDL程序设计。
右图所示的是4选1多路选择器,分别用CASE语句和IF-ELSE两种的表达方式写出此电路的VHDL程序。选择控制的信号s1和s0的数据类型为STD_LOGIC_VECTOR;当s1=‘0’,s0=‘0’;s1=‘0’,s0=‘1’;s1=‘1’,s0=’0’和s1=‘1’,s0=’1’分别执行y<=a、y<=b、y<=c、y<=d。

library ieee;
use ieee.std_logic_1164.all;

entity Multiplexer is
port (
s1, s0: in std_logic_vector(1 downto 0);
a, b, c, d: in std_logic;
y: out std_logic
);
end entity;

architecture Behavioral of Multiplexer is
begin


process (s1, s0)
-- 在这里实现下面的Process,也就是下面的CASE语句或者IF-ELSE语句
.....
end process;


end architecture;

使用CASE语句表示此电路的VHDL程序如下:

process (s1, s0)
begin
case (s1 & s0) is
when "00" => y <= a;
when "01" => y <= b;
when "10" => y <= c;
when "11" => y <= d;
when others => null;
end case;
end process;

使用IF-ELSE语句表示此电路的VHDL程序如下:

process (s1, s0)
begin
if (s1 = '0' and s0 = '0') then
y <= a;
elsif (s1 = '0' and s0 = '1') then
y <= b;
elsif (s1 = '1' and s0 = '0') then
y <= c;
elsif (s1 = '1' and s0 = '1') then
y <= d;
end if;
end process;

作业3

1.δ是什么?在VHDL中,δ有什么用处?
δ是VHDL中一个特殊的关键字,它表示时间单位。在VHDL中,δ可以用来定义时间常数,表示信号改变的时间间隔,主要用于描述时序电路中信号的传输延迟和时序控制中指定的时间间隔。
例如,定义一个时间常数c1,值为10δ,表示信号改变的时间间隔为10个时间单位。

constant c1 : time := 10δ;

在VHDL中,δ的用处主要有以下几点:

  • 定义时间常数,表示信号改变的时间间隔。
  • 定义时间类型变量,表示信号改变的时间点。
  • 定义时序控制语句,表示执行语句的时间延迟。
  • 使用时间相关的内置函数,如now函数、resolution函数等,获取系统的时间信息。

2. 列写出3种在时序电路设计中判断时钟信号clk上升沿的VHDL语句。

  • 使用VHDL内置函数rising_edge:
if rising_edge(clk) then
	-- do something
end if;
  • 使用”event”语句:
if clk'event and clk = '1' then
	-- do something
end if;
  • 使用”if”语句和”clock”关键字:
if clk='1' and clock'event then
	-- do something
end if;
  • 使用”wait on”语句:
wait on clk;
if rising_edge(clk) then
	-- do something
end if;

这3种写法都可以用于判断时钟信号clk的上升沿,并在上升沿的时候执行某个动作。具体的选择方法可以根据具体的应用场景和个人喜好进行选择。
3. 试编写一段VHDL代码,实现一个无符号数比较器,参加比较的矢量宽度均为n+1。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity UnsignedComparer is
generic (
n: positive
);
port (
a, b: in unsigned(n downto 0);
x1, x2, x3: in std_logic;
x: out std_logic
);
end entity;

architecture Behavioral of UnsignedComparer is
begin
process (a, b)
begin
if a > b then
x <= x1;
elsif a = b then
x <= x2;
else
x <= x3;
end if;
end process;
end architecture;

在这个实体的行为模型中,使用了VHDL内置的比较运算符,实现了a和b的比较功能。具体来说,使用了”=“运算符和”<“和”>”运算符分别进行判断,根据比较的结果输出对应的结果。

这一段程序实现了一个无符号数比较器,用于比较两个n+1位宽的无符号整数a和b。当a大于b时,输出x1;当a等于b时,输出x2;当a小于b时,输出x3。
程序中首先声明了所需的库文件,然后定义了一个实体UnsignedComparer,并在实体中定义了一个泛型参数n,表示参与比较的矢量宽度。实体还定义了五个端口,分别为两个输入端口a和b,表示两个要比较的无符号整数;三个输入端口x1、x2、x3,分别表示当a大于b、等于b、小于b时的输出值;一个输出端口x,表示比较后的结果。
在行为模型中,程序定义了一个过程,并在过程中使用if语句进行条件判断,根据比较结果输出不同的值。
最后,在结构模型中,程序将行为模型与实体结合起来,形成完整的比较器。

本文仅供参考,答案正确与否请自行判断,切勿直接抄袭 。

版权声明:本文为博主作者:kanhao100原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/kanhao100/article/details/128165602

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2024年1月11日
下一篇 2024年1月11日

相关推荐