首页 > 编程学习 > 数字设计常用手法

数字设计常用手法

发布时间:2022/2/7 9:54:05

1.在很多的接口时序中,在进行设计时可利用的时钟是有限制的并不是一直有时钟存在的,在设计执行操作中必须要在最后一个时钟前完成所有的操作。举个栗子:
spi接口传输数据时,其sck,mosi,miso,cs四线,
其中只有在有数据时才会有sck,当我们在使用sck进行逻辑操作时,使用其进行时序逻辑设计时,最后一个数据在数据发送完,时序逻辑没有时钟存在完成这个操作,所以要在sck的最后一个时钟上升沿时完成数据操作及存储写入

2.脉冲信号不同时钟域的跨界处理
2.1 低频时钟域脉冲电平信号向高频时钟域传播时,此时一般情况下低时钟域的脉冲电平跨度都是可以被高频时钟所采集到的,我们在处理单bit信号跨时钟域处理时,只需要用高频时钟进行打拍即可,使用脉冲delay 后时电平作为新时钟域的信号
2.2另一种情况则是高频时钟域电平脉冲向低频时钟域传播时,此时则需要一个更高的时钟来进行中转操作:
步骤如下:
使用更高的时钟进行采集高频时钟的脉冲电平,采集到使用寄存器将这个信号进行寄存。
再在低时钟域进行处理,使用低时钟边沿采集
reg gram_dat_vld_syn;
reg gram_dat_vld_scl_i;
reg gram_dat_vld_scl_d;
//reg gram_dat_vld_scl;
always @(posedge clk_osc, negedge rst_n_hard)
if(!rst_n_hard)
gram_dat_vld_syn <= 1’b0;
else if(rd_gram_dat_vld)
gram_dat_vld_syn <= 1’b1;
else if(gram_dat_vld_scl_i)
gram_dat_vld_syn <= 1’b0;

always @(negedge spi_scl, negedge rst_n_hard)
if(!rst_n_hard)
gram_dat_vld_scl_i <= 1’b0;
else if(gram_dat_vld_syn & !gram_dat_vld_scl_i)
gram_dat_vld_scl_i <= 1’b1;

/else if(gram_dat_vld_syn)
gram_dat_vld_scl_i <= gram_dat_vld_scl_i;
/
//这里逻辑还是有必要的防止高频时钟域的信号持续大于1cycle的低频时钟宽度
else
gram_dat_vld_scl_i <= 1’b0;

always@(negedge spi_scl, negedge rst_n_hard)
if(!rst_n_hard)
gram_dat_vld_scl_d <= 1’b0;
else
gram_dat_vld_scl_d <= gram_dat_vld_scl_i;
//延迟处理一拍

wire gram_dat_vld_scl = gram_dat_vld_scl_i & !gram_dat_vld_scl_d;
//用下降沿采集,跨界后的电平信号上升边沿

3.多路串口线的寄存器操作手段来实现减少pad的操作
例如:可以使用cmd命令将某个寄存器作为特立的操作寄存器,然后使用串口线来批量识别命令再将参数pad进行合并导入,这种实现思想来操作。在这里插入图片描述
如题,思想是将串行线上的数据命令特定编码,然后和设计里面之前特设的寄存器进行比对,传输属于它的数据,这个8位数据各个比特位可以设立为此等ip模块输入输出 port这样达到节约pad的目的。

Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000