几个常见的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 ;
		









