fpga学习-8:简单的时序电路(代码片段)

[呲溜] [呲溜]     2022-11-29     604

关键词:

经过上一章的了解

组合电路的最大优势就是能直接根据输入进行输出

但其也有很多的缺点:占大量的电路资源,功耗较大,电路固定...

这一次我们来讲基本的时序电路,写一个简单的时序控制电路

再在此基础上将之前的组合电路乘法器改成时序电路


首先我们要来了解下安路FPGA的时钟信号

安路FPGA的外部24Mhz晶振信号由k14号引脚提供

使用 “IO Constraint” 引脚映射工具

将veilog模块的某一输入端口映射到k14引脚上即可得到24Mhz的时钟信号

先来设计个简单的 “可变分频器”

代码如下:

module Start(
	input clk,
	input button,	
	output[2:0] led
);


reg[31:0] pll,cnt;
reg[2:0] out;

assign led = ~out;

initial begin
	pll = 32\'d24000000;
	cnt = 32\'d0;	
	out = 3\'b001;
end

always @(posedge clk )begin
	if(cnt <= pll) begin
		cnt = cnt + 32\'d1;	 
	end		
	else begin	
		cnt = 32\'d0;		
		out = out << 1;	
		if(out == 3\'d0)begin		
			out = 3\'b001;
		end							
		
	end		
end

integer i=1;

always @(posedge button)begin
	case(i)
		1:begin		
			i=2;		
			pll=32\'d12000000;
		end			
		2:begin	
			i=3;		
			pll=32\'d6000000;
		end			
		3:begin			
			i=1;		
			pll=32\'d24000000;
		end		
	
	endcase

end	

endmodule

引脚映射如下:

1.png

正常编译再烧录进tang perimer里,led就会交错闪烁

按下user按键,闪烁的频率就会发生改变

这最简单的分频器设计


接下来我们再尝试将上一节中的组合电路单周期乘法器改造

变成时序电路多周期乘法器

额,就不要说什么多此一举了

我们的目的是学习

代码如下

module Mul(
	input clk, //时钟信号
	input rst,	//复位信号
	output reg flag,//是否完成信号
	input[7:0] Ai, 
	input[7:0] Bi, 
	output reg[15:0] result
);	

reg[15:0] bi;

initial begin
	bi = 8\'d0,Bi;
	flag = 0;	
	result= 0;
end	

integer i=0;

always @(posedge clk or posedge rst) begin
	if(rst == 1)begin
		bi = Bi;
		flag = 0;	
		result = 0;		
		i=0;
	end			
	else if(flag == 0)begin	
		result = result + (Ai[i] ? bi:0);
		bi = bi << 1;		
		i = i + 1;		
		if(i>=8)begin		
			flag = 1;
		end	
	end
end	

endmodule

可以看到时序逻辑会比组合逻辑复杂得多

但是也正是因为时序电路的“记忆性”

让cpu这类复杂的运算电路得以实现

fpga学习-7:较为复杂的组合电路下(代码片段)

之前我们学会了如何写一个全加器有了全加器我们就能制造出16位加法器等众多运算器接下来我们来写个加法器和乘法器简单的8位加法器如下:moduleAdder8(input[7:0]Ai,input[7:0]Bi, inputCi, outputDo,output[7:0]Yo);wire[6:0]ds;//8个全加器AdderA0(Ai[... 查看详情

[从零开始学习fpga编程-29]:进阶篇-基本时序电路-时序电路的两大基本特征(状态记忆与时钟触发)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:https://blog.csdn.net/HiWangWenBing/article/details/125309874目录前言:第1章时序电路与其特征 查看详情

fpga学习-7:较为复杂的组合电路上(代码片段)

上一节我们学习了基本的3-8译码器组合电路verilog写法这一次我们来点有难度的,写一个整型全加器在此基础上再写一个单周期无符号整型乘法器首先从简单的开始:半加器半加器真值表ABC000011101110真值表可以写为:C=AxorB可以看... 查看详情

[从零开始学习fpga编程-30]:进阶篇-基本时序电路-锁存器(verilog语言)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:目录前言:第1章什么是锁存器1.1什么是时序电路的两大特征 查看详情

fpga硬件工程师verilog面试题(代码片段)

...0c;从基础到大厂面试题👉点击跳转刷题网站进行注册学习微信公众号:嵌入式基地FPGA硬件工程师Verilog面试题(四)习题一:根据状态转移表实现时序电路习题二:根据状态转移图实现时序电路习题三࿱... 查看详情

[从零开始学习fpga编程-37]:进阶篇-基本时序电路-有限状态机实现(verilog)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:目录第1章状态机概述1.1UML描述状态机1.2数字电路描述状态机 查看详情

简述fpga时序约束理论

FPGA时序约束简介。 时序约束的场景:在简单电路中,当频率较低时,数字信号的边沿时间可以忽略时,无需考虑时序约束。但在复杂电路中,为了减少系统中各部分延时,使系统协同工作,提高运行频率,需要进行时序约... 查看详情

学fpga(组合逻辑和时序逻辑)(代码片段)

...       很多人都以为写fpga,就是编写verilog,学习一门编程语言而已。这种观点,其实只对了一半。verilog作为一门语言,其本身是为了简化数字电路设计而存在的。但是,这种语言,和软件的编程语言... 查看详情

[从零开始学习fpga编程-36]:进阶篇-基本时序电路-有限状态机简述(数字电路描述)=》moore型mealy型

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址: 目录前言:第1章状态机的概念回顾第2章数 查看详情

时序电路建模基础

⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合VerilogHDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 查看详情

[从零开始学习fpga编程-35]:进阶篇-基本时序电路-有限状态机简述(uml统一建模语言)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址: 目录前言:第1章什么是有限状态机1.1什么是有限状态机 查看详情

fpga基础知识8(fpga静态时序分析)

...了彻底解决这个问题,我研究了一天,终于找到了一种很简单的解读办法,可以看透它的本质,而且不需要再记复杂的公式了。我们的分析从下图开始,下图是常用的静态分析结构图,一开始看不懂公式不要紧,因为我会在后面... 查看详情

如何快速入门verilog与fpga

...习惯,这个非常重要!来自:求助得到的回答参考技术A学习verilog语法开始, 查看详情

[从零开始学习fpga编程-54]:高阶篇-基于ip核的fpga开发-pll锁相环ip核的原理与配置(altera)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:前言:现代数字电路少不了时钟,时钟是时序电路的心跳,没有时钟,时序电路就无法工作,但是不同功能的时序电路,其所... 查看详情

verilog之简单时钟信号的编写(代码片段)

verilog之简单时钟信号的编写1、数字时钟信号在数字电路中,时钟信号是重要的一类信号,一般作为激励源驱动时序电路。掌握时钟信号的编写,对于时序电路的仿真具有重要意义。所有的时序电路都需要设置时钟信号来确认时... 查看详情

fpga时序分析原理图

...足,又克服了原有可编程器件门电路数有限的缺点。对于时序如何用FPGA来分析与设计,本文将详细介绍。基本的电子系统如图 1所示,一般自己的设计都需要时序分析,如图 1所示的Design, 查看详情

fpga—多路选择器(简单逻辑组合电路)(代码片段)

摘要:多路选择器是数据选择器的别称。在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关。在选择变量控制下,从多路数据输入中某一路数... 查看详情

小小的学习fpga建议

学习FPGA,一点小小的建议或者总结分享。语法层面搞懂阻塞和非阻塞语句,以及Verilog语言的时序描述方法,把自己想象成编译器,尝试去编译自己写的Module,不断总结自己设计的逻辑会综合出怎么样的电路。搞明白同步和异步... 查看详情