fpga入门学习心得笔记

今天开始写一些关于fpga的学习心得,前面的基本语法已经掌握,总结一些代码的实现方法。

关于UART的收发
1.使用两个计数器
一:计数以产生序列机的基本计数单位
二:每当第一个基本计数器计数一轮,这个计数器加一。
第一个计数器是为了控制波特率,可以通过设置参数,实现一个波特率可变的模块。
第二个计数器每次加一,使用状态机进行一次数据的收发。

2.在接受端,仅在一个点进行接受数据,可能会发生数据被冲击信号之类产生干扰,因此需要对每一位的数据进行采样。
根据采样的次数,产生一个计数器,cnt_max与将要采样的次数相关,在每次第二个计数器加一的时候,采集收到的数据值。将所有收到的数据值进行判断。

分频器的使用
默认时钟频率为50M 周期为20ns
always@ (posedge clk or rst_n)
if(rst_n)
cnt<=0;
else if(cnt==1)
cnt<=0;
else
cnt <cnt+1;

默认时钟周期为20ns,cnt在每个下降沿加1,加2次就是40ns

always@ (posedge clk or rst_n)
if(rst_n)
sclk<=0;
else if(cnt==1)
sclk<=~sclk;
每40ns反转一次,周期为80ns,频率为12.5M

如每个下降沿反转,就是2分频,两个下降沿反转是4分频,4个下降沿反转是8分频。

但是由于分频时钟不稳定,所以尽量不要使用

一般写为:(DAC接收为例)
always@(posedge clk)
if()第一个计数器满一轮
case(lsm_cnt)
0:begin din<=data[15];sclk<=1;cs<=0;end
1:sclk<=0;
2:begin din<=data[14];sclk<=1;end
3:sclk<=1;
以此类推

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值