经过上一章的了解

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

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

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

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


首先我们要来了解下安路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 beginpll = 32'd24000000;cnt = 32'd0;    out = 3'b001;
endalways @(posedge clk )beginif(cnt <= pll) begincnt = cnt + 32'd1;     end        else begin  cnt = 32'd0;      out = out << 1;  if(out == 3'd0)begin     out = 3'b001;end                          end
endinteger i=1;always @(posedge button)begincase(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      endcaseend  endmodule

引脚映射如下:

正常编译再烧录进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 beginbi = {8'd0,Bi};flag = 0;   result= 0;
end integer i=0;always @(posedge clk or posedge rst) beginif(rst == 1)beginbi = 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学习-8:简单的时序电路相关推荐

  1. FPGA—多路选择器(简单逻辑组合电路)

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

  2. verilog学习记(时序电路)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 其实,在我看来不管学什么语言,必须去实践.其实,经过自己不断的打磨和练习,才能真正从错误中得到 ...

  3. FPGA学习笔记【FPGA原理与结构】

    注意:本篇内容根据<FPGA原理和结构>([日]天野英晴 著 赵谦 译)一书整理,作者也是初学者,有错漏请见谅 基础知识 FPGA即现场可编程门阵列(Field Programmable ...

  4. FPGA学习笔记(1)简单的时序逻辑电路——流水灯

    FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...

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

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

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

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

  7. 关于fpga的语言逻辑异步电路同步时序电路终于读懂了

    原文链接: http://m.elecfans.com/article/575270.html 从大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表.抢 ...

  8. (29)FPGA面试题时序电路延时

    1.1 FPGA面试题时序电路延时 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题时序电路延时: 5)结束语. 1.1.2 本节引言 "不积跬步 ...

  9. EDA实验(Quartus Ⅱ+fpga) (二)---时序电路的设计-模可变计数器设计

    前言: 本文主要介绍了EDA原理与应用这门课程的相关实验及代码.使用的软件是Quartus Ⅱ,该实验使用fpga芯片为cycloneⅤ 5CSEMA5F31C6. (一)实验目的 (1)进一步熟悉E ...

最新文章

  1. Thrift协议与传输选择
  2. MyBatis-16MyBatis动态SQL之【支持多种数据库】
  3. 你应该更新的Java知识之常用程序库
  4. java实现8、10、16、2进制之间的相互转换(简单易懂实用快速)
  5. TypeError: ‘int‘ object is not callable
  6. linux 系统arp检测工具,linux网络常用诊断工具
  7. pyspider爬虫框架
  8. linux es数据库 head,centos7安装Elasticsearch及Es-head插件详细教程(图文)
  9. 【Linux】快速入门gdb调试工具
  10. 40家重污染行业上市公司进“黑名单”
  11. 在线的棋牌类网络游戏java服务端实现
  12. FineBI中tomcat服务器部署
  13. oracle给表更名,Oracle重命名表
  14. 安卓打造自己的日历控件
  15. 32位服务器系统安装教程,服务器系统数据库安装教程
  16. Python常用内置函数enumerate()详细用法介绍
  17. 通信基础篇小项目-----简单网络画板的的实现
  18. Java接入支付宝支付(沙箱)
  19. Android 版本 相关参数修改(SpreadTrum)
  20. tensorflow 相关书籍推荐

热门文章

  1. Pytrhon编程快速上手-1.8习题
  2. cmi码型变换matlab程序_cmi码码型变换
  3. CentOS6.5修改主机名
  4. 华为云服务器CentOS 8.2 安装docker
  5. C语言——求1到10的阶乘之和
  6. 微盛研究| 加速扩张中的喜茶、奈雪们,为其它品牌提供了怎样的私域启示?
  7. 华中科技大学,您是我胸口上永远的痛
  8. 武汉大学 计算机学院 信明权,林馥 - 教师简历 CV- 武汉大学计算机学院
  9. 图解人工神经网络 BP算法代码和注释
  10. SSL虚拟专用网络通信分析