一步一步开始FPGA逻辑设计-快速上手篇

有心情就赶紧多写几篇

根据我的学习习惯呢,总要先简单的搞个好玩的HelloWorld之流简单项目,先体验一把,有个整体的感性认识,然后开始系统学习。
 其实吧,我实在是想不起来我当初上手玩的是样的小练手了,但是我觉得流水灯应该是做过了,从51单片机,到430,到STM32,到ARM,到FPGA,我想流水灯应该是可以作为硬件界的HelloWorld吧。

那我们就开始流水灯吧!

流水灯就是这个东西

 当然我们做的流水灯不会这么高级的,可以说是一个简单的序列生成器,生成如下序列

时钟周期 序列
0 0000_0001
1 0000_0010
2 0000_0100
3 0000_1000
4 0001_0000
5 0010_0000
6 0100_0000
7 1000_0000

 反应在波形上就应该是这样的,上升沿我们作为时钟的有效沿,每次上升沿到来的时候波形变化。理想情况如下图,这幅图就是功能仿真时序图。

需要完成的波形图

 注意LEDs这一行(最后一行),序列是按照我们预想的方式变化,那么下面我们看这样子功能该如何描述成电路
注意:这里我使用【描述】,不适用【编程】,算是逻辑设计人员的小洁癖吧,我不喜欢称之为编程,虽然也没什么问题。后面再解释为什么要使用描述这个词吧

代码

module top( // 定义一个名称为top的模块
  input clk, // 定义一个输入端口,用来输入时钟
  input rst, // 定义一个输入端口,用来输入复位
  output reg [7:0]led // 定义一组输出总线,用来输出LED灯的序列,0:灭,1:亮
   );
  // 下面这个叫做 always块,描述了一组逻辑
  always@(posedge clk)begin
    if(rst)
      led <= 8'b0000_0001; // 复位情况下输出
    else
     led <= {led[6:0],led[7]}; // 循环向左移位
   end
endmodule // 所有代码必须组成一个module,用module/endmodule包含

就这么简单!
就这么简单!
就这么简单!

电路

 既然使用了【描述】,那么我们看一下这段代码出来的电路时什么样的。你可以将之理解为编译的结果,只是在逻辑里头,我们称之为综合Synthesis,综合的结果成为网表netlist

TOP模块的综合结果
模块内部是一对D触发器按照一定规则级联

 关于【描述】这个词:这段代码就是用一种HDL(硬件描述语言)的规则来描述了这堆电路,所以我们称之为描述。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,261评论 4 61
  • 单从技术史的角度看计算机的发展史,似乎那么多形成条件是偶合的,不免惊叹于它的奇妙,但如果从产品的角度梳理它的原理又...
    行不易一阅读 1,834评论 8 36
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 这个题目是古典说的一句话的后半句,因为我一直在观望,没有行动,所以对这后半句的印象更加深刻一些。现在是2016年的...
    SS楠楠阅读 382评论 0 0
  • 关于作者 大卫·奥格威,现代广告业的大师级传奇人物,他在1948年创立了奥美广告公司,开启了现代广告业的新纪元。 ...
    Angus_Gong阅读 693评论 0 1