一种 Spartan2 FPGA 输入输出模块
图7: 显示 Sparatan2 FPGA 输入/输出细节的框图
分布式块 RAM
分布式块 RAM 的概念主要存在于 Xilinx 设备中。Xilinx 设备的大多数 clb 都包含一个单端口或双端口的小 RAM。由于这个 RAM 分布在 FPGA 中的几个 lut 上,因此称为分布式 RAM。分布式 RAM 的缺点是不能用于大型设计,因为单个 CLB 是不够的。您可以并行地实现几个块 ram,以便实现更大、更宽的内存。Xilinx 合成器工具推断哪些内存将在代码的帮助下使用。使用大量元素的并行阵列可以生成大型 RAM。
块存储器是由两个端口存储器组成的专用块。它由几千字节的 RAM 组成。FPGA 中存在的块 ram 的数量取决于 FPGA 的先进程度。例如,Spartan 6 FPGA 拥有比 Spartan 3更大的块 RAM。块 RAM 应该用于大型的实现。
这两种存储器有不同的工作模式。虽然 WRITE 操作对于两者都是同步的,但是 READ 操作是不同的。对于分布式随机存取存储器,数据一经输入就会被直接读取。它不等待时钟信号。这意味着它是异步的。另一方面,块 RAM 以同步操作模式运行。这意味着数据只能在时钟的上升边缘写入内存。
通过使用 ram _ style 约束,可以强制实现两个 ram 中的任何一个。
编写 FPGA 程序
有两种语言可以用来编写 FPGA: VHDL,Verilog 和 System Verilog。
VHDL 是超高速集成电路硬件描述语言的缩写,它具有实际硬件所具有的一切特点。
这种语言的主要特点包括:
1.它是一种并发语言。这意味着语句可以以类似于现实生活中的硬件的并行方式实现。
2.它是一种顺序语言,意味着语句按顺序一个接一个地实现。
3.这是一种特定时间的语言。这意味着像时钟这样的信号可以根据您的要求进行操作。例如,只有当时钟处于上升沿时,你才能启动一个进程,提供足够的延迟,倒置时钟等等。
4.它不区分大小写。VHDL 代码被转换成映射到设备上的导线和门。
VHDL 的不同造型风格包括行为风格、结构风格、数据流风格以及三者的结合。组合语句和顺序语句可用于实现建模样式。顺序语句一个接一个地实现(串行)。另一方面,组合语句是同时执行的(并行方式)。
在行为风格中,只描述了功能。它主要使用 PROCESS 语句实现。寄存器的结构没有定义。
在结构类型中,电路是用互联元件来描述的。例如,用两个半加法器实现的全加器。
在数据流方式中,电路使用并发语句来描述。例如,一个 MUX 可以用诸如 EXOR 这样的门来描述(换句话说,根据从真值表中获得的布尔表达式来实现)。这不是编写代码的一种非常现实的方法,因为它有几个依赖项,并且使用并发语句。
混合造型风格可以使用上述三种风格的任意组合。
下面的代码是 VHDL 中一个4位计数器的行为实现。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use work.display.all;
en
tity counter is
Port ( clk : in STD_LOGIC;
out_count : out STD_LOGIC_VECTOR (3 downto 0));
end counter;
计数器的行为是:
begin
process(clk)
variable count:std_logic_vector(3 downto 0):=”0000″;
begin
if(clk’event and clk=’1′) then
count:=count+’1′;
if(count=”1111″) then
count:=”0000″;
end if;
end if;
out_count<=count;
end process;
end Behavioral;
图8: RTL 示意图
Verilog 也是一种硬件描述语言,主要用于设计和验证数字电路和 RTL 级抽象。它允许不同抽象层次的设计。它的语法类似于 c 语言。
图9: 在 FPGA 设备中 Verilog 如何定义硬件的示例
Verilog 有三个抽象层次: 行为层、 RTL 层和门层。
在行为抽象中,系统由并发算法描述。在 RTL 中,系统是通过相对于时钟在寄存器之间传输数据来实现的。在门级抽象中,一个系统是拥有属性/时间和逻辑链接。
Verilog 系统是由模块和端口构建的。Verilog 系统是由各种组件组成的模块组成的。一个模块可以由其他模块的实例组成。一个端口可以有三种类型: 输入,输出,输入输出。
单元包括:
1. Parameters: 在编译时指定值的常量。
2. Nets: 用于连接组件
3. Registers: 这些是存储元素。值存储在过程语句期间。寄存器的类型有 reg、 integer、 type 和 real。
4. Primitives and Instances: : 预定义的模块类型,如逻辑门。
5. Continuous Assignments: 描述数据如何从一个地方移动到另一个地方(从一个网络或寄存器)。
6. Procedural Blocks: 这些代表了顺序行为,这些是可执行语句的序列。
7. Task/Function definitions:仅在程序块中实现。
图10: Verilog 系统框图
VHDL v/s VERILOG
这两种语言在硬件描述方面同样有效。选择取决于诸如个人选择、 EDA 工具的可用性和商业、商业和市场问题等因素。
在编译方面,在 VHDL 中,可以对驻留在同一文件中的多个设计单元进行不同的编译。在 verilog 中,编译是一种加速
仿真的方法。
在数据类型方面,VHDL 提供了广泛的数据类型选择(用户定义和其他)。在 Verilog,所有数据类型都是预定义的。尽管存在这个缺点,Verilog 数据类型还是很容易使用,并且侧重于硬件的建模方面,而不是抽象方面。对于高级结构,VHDL 是首选,而 Verilog 是首选,因为它的简单。提供了各种库,Verilog 没有。
VHDL 有助于管理大型设计的帮助下,配置,生成通用和包。Verilog 没有语句,所有语句都可以帮助管理大型设计结构。由于 Verilog 展示了类似 c 的特性,与 VHDL 相比,对于初学者来说,它更容易学习。
FPGA 的应用
由于其优点,FPGA 适用于从航空航天、国防到汽车等广泛的行业。这主要是因为 FPGA 是可定制的。像思科这样的公司在交换机和路由器中使用 FPGA 来提高硬件的速度。
在音频领域,FPGA 广泛应用于便携式
电子、数字信号处理等领域。在射电天文学中,与微处理器和 DSP 相比,FPGA 具有更好的计算性能。
Fpga 在核电厂的运营中也有潜在的应用。这是因为基于 fpga 的系统可以变得更简单、更可测试、对复杂软件的依赖性更小,并且更容易满足安全和安全相关应用的要求。基于 fpga 的系统现在已经开始出现在新的工厂 i & c 设计中,以及运行工厂的更换和升级中。
在医疗领域,fpga 被用于 CT 扫描仪、 MRI 机、超声波机、 x 光机和外科系统。
随着这些应用,fpga 也可以用于无线
通信系统、安全系统、汽车应用、科学仪器和高性能计算。
因此,由于具有灵活性、定制性和低成本,fpga 在各个领域都有着广泛的应用。