FPGA课程plum学习

编程入门 行业动态 更新时间:2024-10-11 17:29:05

FPGA<a href=https://www.elefans.com/category/jswz/34/1770049.html style=课程plum学习"/>

FPGA课程plum学习

设计文件步骤

1.定义接口模块

2.将接口种类定义

3.内部其他参数

4.进行调用连线(模块使用其他模块时)

5.编译内部逻辑(5包括四)

1.定义接口模块

led_run_free_test(Clk,Reset_n,Led);

2.将接口种类定义

    input Clk;input Reset_n;output [3:0]Led;

3.内部其他参数

4.进行模块定义连线(模块使用其他模块时)

led_run_free led_run_free0(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[0]));led_run_free led_run_free1(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[1]));defparam led_run_free1.MCNT = 9999999;//.前的名称为该模块1/2/3的具体名称

 led_run_free    led_run_free0对于模块名字,led_run_free为导入模块名字

原模块为Led_run_free功能为输出为一个Led以一定频率闪烁,将其引用即模块前半名字,后在总体test重新独一无二命名led_run_free0/1/2/3,模块内部线Clk(Clk)与总体线括号内Clk连接

5.编译内部逻辑(5包括四)

对参数进行其他设计,如调用模块中always@j进行计算

总体代码如下

module 
led_run_free_test(Clk,Reset_n,Led);input Clk;input Reset_n;output [3:0]Led;
//模块内置
led_run_free led_run_free0(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[0]));led_run_free led_run_free1(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[1]));defparam led_run_free1.MCNT = 9999999;//.前的名称为该模块1/2/3的具体名称led_run_free led_run_free2(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[2]));defparam led_run_free2.MCNT = 14999999;led_run_free led_run_free3(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[3]));defparam led_run_free3.MCNT = 19999999;    endmodule

调用模块代码

module led_run_free(Clk,Reset_n,Led);input Clk;input Reset_n;output reg Led;//aways中修改的改为regreg [24:0]counter;//aways中改变要reg,25位为25000000的二进制位数parameter MCNT = 4999999;always@(posedge Clk or negedge Reset_n)if(!Reset_n)counter <= 0;//接口按键然后复位else if(counter == MCNT)      counter <= 0;//计数后回零重新计数为500ms,因为回零要一个周期所以-1elsecounter <= counter +1'd1;//尾数加一计时器always@(posedge Clk or negedge Reset_n)if(!Reset_n)        Led<=0;//接口reset到复位键led复位时为0else if(counter == MCNT)Led <= !Led;//时间到达后转换led电平状态endmodule

vivado中自动会将test文件收纳模块run文件,在板机测试中自动下载test。

P16稳态与压稳态

有一点打拍子的概念,打一拍与两拍,与同步与异步

   在小梅哥的视频的图中在最上面的时钟上升沿中如果red1.d寄存器in信号刚好出去变化周期,out1就处于亚稳态马上就不知道如何变化后处于振荡后处于随机一个0/1,在第二个clk上升沿来临时,reg1q读取到reg1d为0进入下降沿信号变化。

解释一下reg2.q晚了两拍后为什么没有了亚稳态现象,处于一种因果现象,第一个信号reg2.d变化与clk的posedge,与reg2.d与clk的posedge的几乎重合,几乎是因为第一个没有因果关系恰好重合时产生冒险,第二种是因果关系是先中间(第一个寄存器)的输入信号为下降,才在一个很短的时间马上下降,图中也可以看出第一个完全重合,第二种有一个小滞后。

关于加一级寄存器减少亚稳态的概率写法如下

  reg key;reg [1:0]key_sync_reg;always@(posedge Clk)beginkey_sync_reg[0] <= key;key_sync_reg[1] <= key_sync_reg[0];endreg reg_key_pre;always@(posedge Clk)//把这个模块合并到上一个模块有什么区别reg_key_pre <= key_sync_reg[1];assign pedge = ! reg_key_pre  && key_sync_reg[1];//原来的逻辑为前为0后为1,前取反(1)后取原(1)与逻辑为1,//与新旧信号,传递越后说明该信号越旧所以旧0新1上升

17A数码管动态显示

动态扫描的原理,由地址位控制但是,多个地址位不能同时打开,为了满足多个地址位置同时亮,可以快速切换选择地址位置利用视觉暂留的特性进行多个地址位同亮,视觉暂留效应。可以以一定率计数器进行扫描不断加n进行时间错位。

就是进行滴水以水滴数量具现时间,进行时序操作。

 ​​​​​​​

更多推荐

FPGA课程plum学习

本文发布于:2024-02-14 14:51:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1763746.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:课程   FPGA   plum

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!