FPGA verilog 模板设计示例(持续更新)

复制代码
重温一下大道至简的至简设计法,正式开发两年多回顾当时的设计方法,又有了更多的体会和感触,希望将模块化运用起来会更有条例。

1 FPGA设计代码模板

c 复制代码
信号命名规范:
1 clk 表示时钟信号小写
2 rstn 表示高电平复位信号 小写
3 rst_n 表示低电平复位信号 小写
4 模块的命名:将模块英文名称的各个单词首字母组合起来,形成3到5个单词,首字母大写
5 参数、宏定义,必须大写

1.1 计数器模板

cpp 复制代码
always@(posedge clk or negedge rst_n) begin
	if(rst_n == 1'b0) 	cnt <= 'd0;
	else if(add_cnt) begin
		if(end_cnt)		cnt <= 'd0;
		else 			cnt <= cnt + 1'b1;
	end
end

这一段计数器模板可以完全套用,需要改变的是add_cnt 和 end_cnt 的值

c 复制代码
assign add_cnt = a == 2;
assign end_cnt = add_cnt && cnt == 10-1;

1.2 状态机模板

我们采用四段式状态机

第一段:同步时序的always模块,格式化描述次状态迁移到现状态寄存器

c 复制代码
always@(posedge clk or negedge rst_n) begin
	if(!rst_n) 				state_c <= IDLE;
	else 					state_c <= state_n;
end

第二段,组合逻辑always块,描述状态转移条件判断

c 复制代码
always@(*) begin
	case(state_c)
		IDLE:begin
			if(idle2s1_start) 		state_n = S1;
			else					state_n = state_c;
		end
		S1: begin
			if(s12s2_start)			state_n = S2;
			else 					state_n = state_c;
		end	
		S2: begin
			if(s22idle_start)		state_n = IDLE;
			else 					state_n = state_c;
		end
		default:					state_n = IDLE;

	end case;	
end

第三段:前两段可以模板拿来即用,这一段需要自己根据项目需要来设定;

c 复制代码
assign idle2s1_start = (state_c == IDLE) && (XX);
assign s12s2_start   = (state_c == S1) && (XX);
assign s22idle_start = (state_c == S2) && (XX);

第四段:也是根据实际项目需要来设定

c 复制代码
always@(posedge clk or negedge rst_n) begin
	if(!rst_n) 				out1 <= 1'b0;
	else if(state_c == S1)  out1 <= 1'b1;
	else 					out1 <= 1'b0;
end
相关推荐
Turing_kun2 小时前
基于FPGA的实时图像处理系统(1)——SDRAM回环测试
fpga开发
I'm a winner1 天前
新手入门Makefile:FPGA项目实战教程(二)
笔记·fpga开发
我爱C编程1 天前
基于FPGA的8PSK+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
fpga开发·通信·8psk·帧同步·snr·卷积编码·维特比译码
I'm a winner1 天前
新手入门 Makefile:FPGA 项目实战教程(三)
fpga开发
范纹杉想快点毕业1 天前
嵌入式 C 语言编程规范个人学习笔记,参考华为《C 语言编程规范》
linux·服务器·数据库·笔记·单片机·嵌入式硬件·fpga开发
lazyduck2 天前
从半年到一年的 bug 往事:TCP modbus的卡死与补救
fpga开发·modbus
范纹杉想快点毕业2 天前
《嵌入式 C 语言编码规范与工程实践个人笔记》参考华为C语言规范标准
服务器·c语言·stm32·单片机·华为·fpga开发·51单片机
Chipi Chipi3 天前
FPGA即插即用Verilog驱动系列——串口数据、命令解析
fpga开发
FPGA_ADDA3 天前
基于 AMDXCVU47P HBM2 FPGA 的 2 路 100G 光纤 PCIe 高性能计算加速卡
fpga开发·vu47p·100g光纤pcie·高性能计算加速卡
霖003 天前
高级项目——基于FPGA的串行FIR滤波器
人工智能·经验分享·matlab·fpga开发·信息与通信·信号处理