美文网首页我爱编程
一步一步开始FPGA逻辑设计-快速上手篇

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

作者: kakaan | 来源:发表于2016-10-16 22:34 被阅读191次

有心情就赶紧多写几篇

根据我的学习习惯呢,总要先简单的搞个好玩的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(硬件描述语言)的规则来描述了这堆电路,所以我们称之为描述。

相关文章

网友评论

    本文标题:一步一步开始FPGA逻辑设计-快速上手篇

    本文链接:https://www.haomeiwen.com/subject/dflayttx.html