当前位置:   article > 正文

从小白开始学FPGA,vivado实操第一次,初步产生波形_fpga波形

fpga波形

        上次介绍了如何创建工程,这次来实现一个波形的产生,vivado用的是Verilog语言,语法很简单就不单独说了,慢慢在程序里很快就学会了,大概的介绍我粘在文章最后,想看就看不想看直接实操也行。

        在创建的主程序中找到这个模块的括号,我把括号内容理解为这个模块的端口,如下面的程序所示,有一个时钟端口,一个复位端口,和一个输出端口,逗号隔开,最后一个不用加。红线是因为没对他们进行声明,我习惯在括号外进行声明,这样之后的例化可以直接复制(例化会在后面说)

下面对信号进行声明,时钟信号和复位信号肯定是需要输入的,输出信号输出,如图,这时候报错就没有了,1.input,output表示输入或输出。2.表示声明的名字,每个语句要加分号3.表示这个变量占多少个二进制数,本文这个是八位二进制数(0,1,2,3,4,5,6,7八位),也就是输出要小于等于255

 接下来定义信号类型,设计中所有的信号类型定义,只有 reg 和 wire 两种,现在先知道,下面会说他两个的区别。定义的时候同样考虑信号的大小,不写的话默认为一位,如果不定义信号类型默认为wire型。

下面编写程序的主要模块,1.直接先照抄,表示时序逻辑。2.(posedge clk or negedge rst_n)叫做敏感列表 ,也就是说每逢时钟的上升沿和复位信号的下降沿,都要执行一遍这个程序。3.begin end 表示这之间是一个整体,里面的语句顺序执行。

中间为了方便我就直接把这个时钟和复位的值减了一下,其中可以发现,我使用了一个'<='进行赋值,这叫做非阻塞赋值,一个小技巧,这种赋值方式只用在 always@(posedge clk or negedge rst_n) 这里面,其他的用等号赋值,同时'<='所指的变量要用reg进行定义,也就是reg型,其他都是wire型。这样我们的主程序就写完了,ctrl+s保存。

 下面我们开始写测试文件进行仿真,直接上代码你们看注释吧,基本每句都解释了

  1. module tb_project_2;
  2. reg clk ;//定义变量,下边clk被‘<=’指着,所以用reg型
  3. reg rst_n ;
  4. wire out ;//输出没被指着所以是wire型
  5. initial begin //照着写就行,initial里面就是信号的波形
  6. clk <= 0 ;//初始化时钟
  7. forever #10 clk <=~clk;//循环,每隔10个单位时钟反向一次,一单位时间在程序第一行
  8. end
  9. initial begin
  10. rst_n <= 0 ;
  11. #100 rst_n <= 1 ;//#100的意思就是经过100个单位执行下一条
  12. end
  13. project_2 tb( //例化,下面会解释
  14. clk ,
  15. rst_n ,
  16. out
  17. );
  18. endmodule

现在说一下例化,把主程序这块复制下来,

粘贴到测试程序中,加'空格'和'例化名',我都是随便写例化名,一般就写tb,例化可以把测试文件的三个端口和主程序的三个端口连接起来,还有一种更规范的写法。在下一个图

 

 这样就完成了整个工程的程序书写,ctrl+s保存

下面运行一下试试

 

 点这个Run Simulation,然后点run这个就行了,生成的波形文件放大,拉到最前边,可能因为每个上升沿执行clk-rst_n,out是这样,时钟和复位信号相减(这里输出我也不太明白)

 

 下面是Verilog的一些语法

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/436479
推荐阅读
相关标签
  

闽ICP备14008679号