数字设计常用手法

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;
//用下降沿采集,跨界后的电平信号上升边沿
//-----------------------------------------------------
//修改:
处理方式是用高时钟域的时钟将此脉冲信号进行打拍处理,然后再使用寄存器寄存电平状态,使用方式:
always@(posedge clk_h or negedge rstn)
if(!rstn)
signal_a_level <= 1’b0;
else if(signal_a_pulse)
signal_a_level <= 1’b1;
else if(signal_a_pulse_d4)
signal_a_level <= 1’b0;

always@(posedge clk_l or negedge rstn)
if(~rstn)
signal_b_level <= 1’b0;
signal_b_level_d1 <= 1’b0;
else
signal_b_level <= signal_a_level;
signal_b_level_d1 <= signal_b_level;

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

//----------------------------------------------------------------------------------------
vcs 脚本使用随机数种子的做法
在这里插入图片描述

//==========================================================
vsc 进行代码加密功能命令
在这里插入图片描述
//==========================================================
protect ............. ............ endprotect
vcs -full64 +protect otp_ctrl.v //vcs 仿真工具的命令

//==========================================================
//pragma protect
//pragma protect begin


//pragma protect end
ncprotect -language vlog otp_ctrl.v //cadence 仿真工具命令
在这里插入图片描述
//===================================================
//寄存器软复位的设计,复位或者开始动作脉冲释放的操作设计

//-------------------------------------------------------------------------
//sw_clr
assign  sw_clr_st = (wr_en_page0 && (info_addr == 8'hfc) && (info_data_in[1]));
always @(posedge osc_clk or negedge rstn)
  if(!rstn)
    sw_clr_en <= 1'b0;
  else if(sw_clr_st)
    sw_clr_en <= 1'b1;
  else if(sw_clr_cnt == 8'hff)
    sw_clr_en <= 1'b0;

always @(posedge osc_clk or negedge rstn)
  if(!rstn)
    sw_clr_cnt <= 8'b0;
  else if(sw_clr_en)begin
    if(sw_clr_cnt == 8'hff)
      sw_clr_cnt <= sw_clr_cnt;
    else
      sw_clr_cnt <= sw_clr_cnt + 8'd1;
  end
  else
    sw_clr_cnt <= 8'h0;

assign  infoo_fa_sw_clr = ~sw_clr_en;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值