HDL bits 题目知识点----持续更新

1、符号  +:   或者   -:

in[sel*4 +: 4]    代表取in的sel*4 到  sel*4 + (4-1)位,比如当sel为0 时,即in[0 +: 4] 代表从0开始取4位,也就是  in[3:0]

in[3 -: 4]  代表从3开始(包含3)向下取4个数 ,即in[3:0]

2、SOP和POS形式的逻辑函数分别通过最小项和最大项来获得。

SOP : 画 Y=1 时的式子

POS :画 Y = 0 的式子

3、对信号进行打拍的理解

4、双边采样

即对信号打半拍

module top_module (
    input clk,
    input d,
    output q
);
    wire clk_reg;
    reg d1;
    reg d2;
    /*
    assign q = clk? d1 : d2;
    always@ (posedge clk ) begin
          d1 <= d;
    end
    
    always@ (negedge clk ) begin
          d2 <= d;
    end
    */
    assign q = d1 ^ d2;
     always@ (posedge clk ) begin
          d1 <= d ^ d2;
    end
    
    always@ (negedge clk ) begin
          d2 <= d ^ d1;
    end
    
endmodule

5、BCD计数器

module top_module (
    input clk,
    input reset,   // Synchronous active-high reset
    output [3:1] ena,
    output [15:0] q);
    
    wire [3:0]c;
    
    assign ena = {c[0] & c[1]& c[2], c[1]& c[0], c[0]};
    
    ten one (
        .clk  (clk),
        .reset (reset),
        .count (q[3:0]),
        .ena (c[0]),
        .val(1'b1)
    );
    ten ten_inst (
        .clk  (clk),
        .reset (reset),
        .count (q[7:4]),
        .ena (c[1]),
        .val(c[0])
    );
    ten hud (
        .clk  (clk),
        .reset (reset),
        .count (q[11:8]),
        .ena (c[2]),
        .val(c[0] & c[1])
    );
    ten thou (
        .clk  (clk),
        .reset (reset),
        .count (q[15:12]),
        .ena (c[3]),
        .val(c[0] & c[1] & c[2])
    );
 
endmodule
 
module ten(
    input clk,
    input reset, 
    input val,
    output wire ena,
    output reg [3:0] count
);
    
    assign ena = count == 4'd9 ? 1'b1 : 1'b0;
    
    
	always@ (posedge clk)
        if(reset)
            count <= 4'd0;
    else if (count == 4'd9 && val)
        count <= 4'd0;
    else if(val)
        count <= count + 1;
    
    
    
endmodule

 5、设计 FIFO 的深度

假设 FIFO 的写时钟为 100MHZ,读时钟为 80MHZ。在 FIFO 输入侧,每 100 个时钟,写入

80 个数据;FIFO 读入测,每个时钟读取一个数据。设计合理的 FIFO 深度,使 FIFO 不会溢

出。

我们需要考虑数据轻载和重载的情况,对缓存能力要求最高的情况为背靠背传输,则 FIFO

深度为 160-(160/100)*80=32

我们将问题一般化:

1) 写时钟频率 WCLK

2) 读时钟频率 RCLK

3) 写入测每 B 个时钟周期有 A 个数据写入

4) 读取测每 Y 个时钟周期有 X 个数据读出

则 FIFO 的深度为,

其中 burst_length 与写入测情况有关。

 如果100个写时钟周期可以写入80个数据,10个读时钟可以读出8个数据。令wclk=rclk ,考虑背靠背(20个clk不发数据+80clk发数据+80clk发数据+20个clk不发数据的200个clk)代入公式可计算FIFO的深度
fifo_depth = 160-160X(80%)=160-128=32

    如果令wclk=200mhz,改为100个wclk里写入40个,rclk=100mhz,10个rclk里读出8个。那么fifo深度为48
计算如下fifo_depth =80-80X(80%)X(100/200)=80-32=48

6、>>>是算术右移,考虑符号位,如果是0,则左边补0,如果是1,则左边补1

7、

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eachanm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值