1.1 目录
(1)目录
(2)FPGA介绍
(3)Verilog HDL Bits:设计电路实现Thermostat(温度调节器)
(4)原理和代码讲解
1.2 FPGA简介
FPGA是在PAL、GAL、EPLD、CPLD等可编程器件的基础上进一步发展的产物。它是作为ASIC领域中的一种半定制电路而出现的,即解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。
1.3 代码
//错误代码
module top_module(
input [1023:0] in,
input [7:0] sel,
output [3:0] out );
assign out=in[sel*4+3:sel*4] ;
endmodule
错误代码错误的原因:冒号“:”操作符A[a : b]的含义理解为vectorA中选择位的范围,目前其中a和b只能是常数,而不能是变量,但sel是变量所以不行。
//正确的代码
module top_module(
input [1023:0] in,
input [7:0] sel,
output [3:0] out );
assign out={in[sel*4+3],in[sel*4+2],in[sel*4+1],in[sel*4]} ;
endmodule
正确的是使用位拼接把out的4位拼接出来。因为单独使用in[a],其中a可以是变量。