FPGA与CPLD的区别?
FPGA和CPLD都属于高密度可编程逻辑器件。
FPGA 以查找表 结构方式构成逻辑行为, 适合完成时序逻辑,即适用于实现触发器丰富的逻辑电路。 程序存储: FPGA大部分基于SRAM编程,系统断电后编程信息丢失,需要外挂EEPROM来存储配置信息,每次上电后,将配置信息重新写入SRAM。
CPLD 以乘积项 结构方式构成逻辑行为, 适合完成各种算法和组合逻辑,即适用于触发器有限而乘积项丰富的逻辑电路。程序存储:内部EEPROM或者FLASH存储器编程。
CPLD比FPGA速度快,保密性好。
FPGA比CPLD集成度高,功耗低,编程灵活性大。
CPLD是逻辑块级编程,通过修改固定内连电路的逻辑功能来编程,而FPGA是门级编程,主要通过改变内部连线来编程。FPGA比CPLD灵活。
下图可参考 但CPLD比FPGA速度快。保密性好。 集成度低。
锁存器latch和触发器flip-flop的区别?
锁存器:对脉冲电平敏感,在时钟脉冲的电平作用下改变状态。
锁存器是电平触发的存储单元,数据的存储取决于输入时钟信号的电平值,当锁存器处于使能状态,数据才会随着数据输入而变化。两个输入信号,一个有效使能信号,一个输入数据信号。在使能信号有效时,将D的值给Q。
触发器:
触发器对脉冲边沿敏感,其状态只在时钟脉冲的上升沿或下降沿的瞬间变化。
触发器一直保持它们的状态,直到它们收到输入脉冲,当收到输入脉冲时,触发器输出,然后保持这个状态直到收到下一个触发。
寄存器: 用来存放数据的一些小型存储区域。因为一个锁存器或触发器能存储一位二进制数,所以N个锁存器或者触发器可以构成N位寄存器。
寄存器可以完成数据的串并转换,串并转换。
串转并: 移位寄存器。。移位的方式为: 位拼接+计数
采用位拼接技术,移位寄存器,将串行的数据数据先表示出来,然后发送一位数据加1。一般八位数据,每次取低7七位为最高位,新数据为最低位。 (低位先赋值) 然后利用计数器计数,美国一个时钟数据给低一位,8个时钟后,得到并行的八位数据。
timescale 1 ns/ 1 ns
module serial2parallel(
input clk,
input rst_n,
input en,
input data_i,
output reg [7:0] data_o
);
reg [7:0] data;//输出寄存器
reg [2:0] count;//计数器,控制并行数据更新,8位数据
//初始化
always@(posedge clk or negedge rst_n)
begin
if(rst_n==1'b0)
count<=3'b0;
else if(en==1)
count<=count+3'b1;
end
//移位
always@(posedge clk or negedge rst_n)
begin
if(rst_n==1'b0)
data<=8'b0;
else if(en==1'b1)
data<={data[6:0],data_i};
end
//数据输出
always@(posedge clk or negedge rst_n)
begin
if(rst_n==1'b0)
data_o<=8'b0;
else if(rst_n==1'b1&&en==1'b1&&count==3'b111)
data_o<=data;
end
endmodule
并转串:通过移位寄存器,八位数据,用八位寄存器寄存。
通过<<1,左移操作。每次取最高位数据,第一次赋值数据,通过取最高位。
module parallel2serial(
input clk,
input rst_n,
input en,
input [7:0] data_i,
output data_o
);
reg [7:0] data_buf;
always@(posedge clk or negedge rst_n)
begin
if(rst_n==0)
data_buf<=0;
else if(en==1'b1)
data_buf<=data_i;
else
data_buf<=data_buf<<1;
end
assign data_o=data_buf[7];
endmodule