几个常见的FPGA问题之序列发生器、编码器、D触发器
- 关键词: 调用,Verilog HDL,序列发生器、编码器、D触发器
一、引言
FPGA(现场可编程门阵列)是一种灵活的硬件平台,它允许设计者根据需要实现数字逻辑电路。本文讲述几个FPGA常见的问题——序列发生器、编码器、D触发器,以及将对应的FPGA工程附在最后。在FPGA设计中,序列发生器、编码器和D触发器是三种常见的基本构件,它们各自有不同的用途和可能遇到的问题。
二、背景
1、序列发生器(Sequence Generator)
(1) 用途
(2) 常见问题
2、编码器(Encoder)
(1)用途
(2)常见问题
3、D触发器(D Flip-Flop)
(1)用途
(2)常见问题
二、问题及解决方案
1. 序列发生器(Sequence Generator)
(1)问题
构建工程,实现110100序列发生器,编写仿真代码进行测试。
编写要求:
构建工程流程;
设计过程(分析并画出状态图);
代码有注释;
仿真代码;
仿真结果。
(2)解答
解答:
a) 工作流程
在vivado中选择 add source,增加主工程sequence_generator.v文件,并编写代码, 实现110100序列发生器,最后在vivado中选择 add source 中增加 tb文件,仿真测试110100序列发生器是否正常。
b) 设计过程
使用6个状态,分别检测当前序列是否在 1,10,101,1011,10110和101100,并在最后一个状态输出序列检测成功标志。
c)代码
sequence_generator模块实现的功能是一个条件触发的序列检测器。具体来说,它检测输入信号data_in的特定序列,并在检测到该序列时产生一个输出脉冲data_out。
module sequence_generator(
input clk ,
input rst_n ,
input data_in ,
output data_out
);
parameter S0 = 3'D0 ; // IDLE
parameter S1 = 3'D1 ; // 1
parameter S2 = 3'D2 ; // 101
parameter S3 = 3'D3 ; // 1011
parameter S4 = 3'D4 ; // 10110
parameter S5 = 3'D5 ; // 101100
reg[2:0] c_state ;
reg[2:0] n_state ;
always@( posedge clk or negedge rst_n)
begin
if( !rst_n )
c_state <= 0 ;
else
c_state <= n_state ;
end
always@( * )
begin
if( !rst_n )
n_state = 0 ;