文章目录

  • 2021秋招笔试(1)_乐鑫
    • 1、FIFO测试
      • **1)题目**:
      • 2)分析
      • 3)解析
    • 2、按键识别、消抖
      • 1)题目
      • 2)分析
    • 3、用Verilog 实现 CRC-8 的串行计算,G(D) = D8 + D2 + D + 1,计算流程如下
    • 4、setup/hold time 和 温度/电压关系
      • 知识补充:
    • 5、NAND 和 NOR Flash 的区别
    • 6、验证
    • 7、优化
    • 8、异步设计中对跨时钟处理的信号,功能验证时一般要考虑
    • 9、欲产生序列信号 11010111,则至少需要(3)级触发器
    • 10 FIFO 深度计算
    • FIFO
      • 场景1:fa>fb with no idle cycles in both write and read
      • 场景2:fa>fb with two clock cycle delay between two successive read and write
      • 场景3:fa > fb with idle cycles in both write and read
      • 场景4:fa > fb with duty cycles given for wr_enb and rd_enb.
      • 场景5:fa < fb with no idle cycles in both write and read
      • 场景6:fa < fb with idle cycles in both write and read
      • 场景7:fa = fb with no idle cycles in both write and read
      • 场景8:fa = fb with idle cycles in both write and read
      • 场景9:Data rates are given,read and write random(important!!!)
      • 下面来计算FIFO最小深度
    • 补充1
    • 补充2
    • 补充3

2021秋招笔试(1)_乐鑫

参考:

  • https://mp.weixin.qq.com/s/0C1gkOuknTFJe8y0oH19dw
  • https://blog.csdn.net/DengFengLai123/article/details/106757235
  • https://blog.csdn.net/zhangningning1996/article/details/106795689

1、FIFO测试

1)题目

请根据下面的设计描述,尽可能多的列出你所能想到的测试点:

一个异步FIFO,rdata和wdata均为8位数据,FIFO深度为16,当rst_n输入为低时,FIFO被复位,当wclk的上升沿采样到wr为高时,数据被写入FIFO,当rclk的上升沿采样到rd为高时,FIFO输出数据。此外,当FIFO为空时,empty信号输出为高,当FIFO满时,full信号输出为高。

2)分析

[7:0] rdata,wdata;
reg[7:0] mem[15:0];
rst_n = 0 复位
always@(posedge wclk) beginif(wr && !full)mem[wr_ptr] <= wdata;
endalways@(posedge rclk) beginif(rd && !empty)rdata <= mem[wr_ptr];
end

所以应该有两方面测试:

  • 1、FIFO的功能

    • FIFO
    • 读、写(在对应使能端是否正确变化)
    • 空、满信号生成、判断
    • 读空、写满处理
  • 2、异步复位:异步机制中的几个组件
    • 格雷码转换
    • 两级触发器同步

3)解析

根据题目,主要有两个一级测试点

1、FIFO 基本功能 2、异步处理

对于 FIFO 的基本功能,可以使用黑盒用例 进行 端到端测试,通过注入特定序列的输入检测输出是否符合预期。有以下二级测试点

  • 1、写端口时序行为与描述一致,检查数据在wr被采样时候正确写入
  • 2、读端口……………………,………………rd ……………………
  • 3、FIFO 能保证先进先出
  • 4、空信号能正确产生
  • 5、满信号能正确产生
  • 6、检查在写满、读空之后,是否有做读写保护防止数据覆盖(白盒可检查memory 数据)
  • 7、…………………………………………………防止空满信号错乱(白盒可检查指针,内部计数器)
  • 8、检查能否被正常复位,复位之后各输出信号初始状态(复位值)是否正常。

对于异步处理,必须要进行白盒测试,假设内部实现是经典的异步FIFO实现,则有以下二级测试点:

  • 1、格雷码转换逻辑的正确性
  • 2、跨时钟域传输,是否进行同步器打拍处理,以及指针信号经过同步器打拍延时对功能带来的影响(理论上没有影响)
  • 3、频率不同对FIFO读写的影响,覆盖读快写慢和读慢写快(理论上没有影响)

2、按键识别、消抖

1)题目

请实现对4x4矩阵式键盘的按键识别,假设每次都是单按键输入,需要有去抖功能(持续20ms以上被认为是有效键值),模块时钟频率为1kHz,要求用状态机实现,定义状态,画出状态转移图,并用verilog完整描述该识别模块。矩阵式键盘电路结构参见下图,其中行线1 ~ 4由识别模块控制输出,列线5 ~ 8为识别模块的输入

2)分析

要求:状态机实现、定义状态、画出状态转移图,Verilog描述

注意:题目中的输入、输出是相对于识别模块(右下角黄色)而言的

两部分工作:

  • 1、方法:如何判断按键,消抖

    • 判断按键:确定(x,y)坐标:

      • 先将输入置0或置1,检查输出,确定有按键按下 —— 行线1 ~ 4 置0(识别模块的输出 是 该模块的输入),检查列线 5 ~ 8 中哪一个为低电平,则该列有按键按下
      • 再用控制变量法确定坐标 —— 行线 1 ~ 4 分别置 0111、1011、1101、1110,若某一个数(如0111)的输出 5 ~ 8 检测到(1011)低电平,则确定坐标 0111_1011 为第一行、第三列位置(注意第5号线是最右边一列)
    • 消抖:根据要求的有效按键值,计算需要的时钟周期数 (如 1kHz,周期1ms,20ms即为20个周期)
  • 2、Verilog实现
IDLE:初始状态,或 1 ~ 4(in)为低电平时,5~8(out)未检测到低电平,out=4'b0,
s1:1~4为低电平 4'b0000 时,有按键按下,5~8检测到低电平若持续20ms,则列号确定,转到下一状态;若小于20ms,则回到IDLE状态。
s2:确定有按键按下时, 1~4 置为4'b0111,监测输出,如5 ~ 8号线为0111、1011、1101、1110,则确定按键位置,转为done状态;否则,转到s3
s3:………………………………………………………………4'b1011,……………………………………………………,……………………;…………………… s4
s4:………………………………………………………………4'b1101,……………………………………………………,……………………;…………………… s5
s5:………………………………………………………………4'b1110,……………………………………………………,……………………;由于已经确定有按键按下,所以肯定会确定出位置
done:已经识别出按键,且消抖,输出结果。转到IDLE状态。此处题目没有额外要求,也可将 in[3:0] 和 out[3:0] 编码,得到输出 code[3:0] ,对应16个按键
module key_detect
#(parameter data_width = 4)
(input clk,rst_n,input[data_width-1:0] in,output[data_width-1:0] out);reg[2:0] current_state;reg[2:0] next_state;reg[4:0] cnt;always@(posedge clk or negedge rst_n) beginif(!rst_n)current_state <= 3'b0;elsecurrent_state <= next_state;endreg valid;reg en;always@(current_state or in) beginnext_state = current_stata;out = 0;valid = 1'b0;case(current_state)3'b000:beginin = 4'b0000;if(out != 4'1111)next_state = 3'b001;elsenext_state = 3'b000;end3'b001:begin // 按键消抖模块valid = 1'b1if(!en)next_state = 3'b000;        // 按键抖动,回到IDLE状态elsenext_state = 3'b010;       // 按键按下,到下一状态end3'b010:beginin = 4'0111if(out == 4'1111) next_state = 3'b011;else next_state = 3'b110;end       3'b011:beginin = 4'b1011;if(out == 4'1111) next_state = 3'b100;else next_state = 3'b110;end   3'b100:beginin = 4'b1101;if(out == 4'1111) next_state = 3'b101;else next_state = 3'b110;end    3'b101:beginin = 4'b1110;next_state = 3'b110;end        3'b110:next_state = 3'b000;endalways@(posedge clk or negedge rst_n) beginif(!rst_n)cnt <= 0;en <= 0;else if(valid)beginif(cnt < 4'd10)begincnt <= cnt + 1'b1;en <= 0;endelsebegincnt <= cnt;en <= 1;endendelse begincnt <= 0;en <= 0;endend// 然后根据 in 和 out 就可以确定位置,如 {in,out}=0111_1011,确定是第一行第二个按钮//// 若要求对输出编码,且输出端口中有 output[data_width-1:0] code,always@(in or out)case({in,out})8'b0111_0111:code=3;  // 5号线对应最右边列8'b0111_1011:code=2;8'b0111_1101:code=1;8'b0111_1110:code=0;8'b1011_0111:code=7;8'b1011_1011:code=6;8'b1011_1101:code=5;8'b1011_1110:code=4;8'b1101_0111:code=11;8'b1101_1011:code=10;8'b1101_1101:code=9;8'b1101_1110:code=8;8'b1110_0111:code=15;8'b1110_0111:code=14;8'b1110_0111:code=13;8'b1110_0111:code=12;default code=0;endcase
endmodule

3、用Verilog 实现 CRC-8 的串行计算,G(D) = D8 + D2 + D + 1,计算流程如下

module crc_8
(#parameter data_width = 32)
(   input clk,input rst_n,input data,input data_vlid,input crc_start,output crc_out,output crc_valid);reg[7:0] shift_reg;reg[4:0] cnt;reg[2:0] cnt_out;reg flag;assign crc_out = shift_reg[cnt_out];// 图中结构实现,数据输入、移位always@(posedge clk or negedge rst_n) beginif(!rst_n)shift_reg <= 8'hff;else if(!crc_start)shift_reg <= 8'hff;else if(data_valid)beginshift_reg[0] <= data ^ shift_reg[7];shift_reg[1] <= data ^ shift_reg[7] ^ shift_reg[0];shift_reg[2] <= data ^ shift_reg[7] ^ shift_reg[1];shift_reg[3] <= shift_reg[2];shift_reg[4] <= shift_reg[3];shift_reg[5] <= shift_reg[4];shift_reg[6] <= shift_reg[5];shift_reg[7] <= shift_reg[6];endend// 计数,32bit输出串行输入always@(posedge clk or negedge rst_n)beginif(!rst_n)cnt <= 5'd0;else if(cnt == 5'd31 && data_valid == 1'b1)cnt <= 5'd0;else if(data_valid)cnt <= cnt + 1'b1;elsecnt <= cnt;end// 输入结束表示 flagalways@(posedge clk or negedge rst_n)beginif(!rst_n)flag <= 1'b0;else if(cnt == 5'd31 && data_valid == 1'b1)flag <= 1'b1;elseflag <= 1'b0;end// 在数据输入完成之后,再串行输出always@(posedge clk or negedge rst_n)beginif(!rst_n)cnt_out <= 3'd0;else if(flag)cnt_out <= 3'd7;else if(cnt_out > 3'd0)cnt_out <= cnt_out - 1'b1;elsecnt_out <= 3'd7;endalways@(posedge clk or negedge rst_n)beginif(!rst_n)crc_valid <= 1'b0;else if(flag == 1'b1 || cnt_out > 3'd0)crc_valid <= 1'b1;else crc_valid <= 1'b0;endendmodule

4、setup/hold time 和 温度/电压关系

一批IC样品在测试中发现有setup或者hold时序问题,现取A,B,C,D四种样品进行测试。A降温后停止工作,则可能是==(setup(40nm以下工艺)/(hold(40nm以上工艺))问题。B升温后停止工作,则可能是(hold(40nm以下工艺)/(setup(40nm以上工艺))问题。C降压后停止工作,则可能是(setup)问题。D升压后停止工作,则可能是(hold)==问题。

知识补充:

温度升高:会使载流子速率降低(散射、碰撞概率增大),也会使Vth降低。但两者的影响大小不同

  • 40nm以上的工艺,升温对于 Vth的影响可以忽略,载流子速率对电流影响占主导

  • 40nm以下的工艺,升温使得Vth 显著降低,载流子速率影响不大

电压影响:

  • 升压,电流增大,延时小

  • 降低,电流减小,延时大

setup/hold time问题

  • setup问题:时序关键路径总时延过大
  • hold 问题:………………总时延过小

5、NAND 和 NOR Flash 的区别

1、NAND 中常存在坏块

2、NAND 容量可以做到很大

3、NAND 写入速度比较快

4、NOR 读出速度比较快

6、验证

动态验证:modelsim 仿真、后仿 (验证结果依赖于向量输入,动态改变)

静态验证:形式验证、STA (不依赖于具体测试用例)

7、优化

面积优化:逻辑优化、资源共享、串行化

时序优化:寄存器配平、流水线设计、关键路径优化

8、异步设计中对跨时钟处理的信号,功能验证时一般要考虑

信号高电平有效还是低电平有效

信号变化的最小宽度 (低频采高频场景下,功能仿真可以仿真出漏采现象)

时钟频率 (不同时钟频率的跨时钟域是否有频率不同导致的功能与预期不一致)

9、欲产生序列信号 11010111,则至少需要(3)级触发器

至少:用8个状态的状态机,其输出为 序列,即可产生

若用移位寄存器,则:

  • 3个,110 ->101 -> 010 -> 101 ,重复,不行
  • 4个,……………… 1111 ->1111 ,重复,不行
  • 5个, 不重复,可行。 所以用移位寄存器产生该序列要 5 个触发器

10 FIFO 深度计算

考虑最大数据情况:

  • 在module A,B 启动后的 10us内,module A一直在传输数据,共有 2us 有效数据,需要存储 1280Mbit/s * 2us = 2560 bits;
  • 第11us,module A 传输数据 1280Mbit/s * 1us = 1280 bits, moduleB 读取640Mbits/s * 1us = 640 bits, 需要存储 640 bits
  • 此时总共需要存储 2560 + 640 = 3200 bits

考虑读取

前15us 共写入 1280Mbits * 3 us = 3840 bits, 读取 5us * 640 Mbits/s = 3200 bits,需要存储 640 bits

综合考虑

最大需要存储 3200 Mbits,深度需要 3200/32 = 100 ,选 最接近的 128 合适。

FIFO

【题目】we need to employ an asynchronous FIFO between two modules working at different clock domains.FIFO is required, only when you are slow at reading and fast in writing to buffer. The design (size) of the FIFO should be in such a way that, the FIFO can store all the data which si not read by the slower module.

(1) please calculate the minimum FIFO depth for the following cases respectively.

(2) Use verilog to implement a FIFO for any one of the cases

Case1: fA > fB with no idle cycles in both write and read.

Writing frequency = fA = 80MHz

Reading freqency = fB = 50MHz

Burst Length = No. of data items to be transferred = 120.

There are no idle cycles in both reading and writing which means that, all the items in the burst will be writen and read in consecutive clock cycles.

Case2: fA > fB with idle cycles in both write and read

Writing frequency = fA = 80MHz

Reading frequency = fB = 50MHz

Burst Length = No.of data items to be transferred = 120.

No. of idle cycles between two successive writes is = 1.

No. of idle cycles between two successive reads is = 3.

Case3: fA > fB with duty cycles given for wr_enb and rd_enb.

Writing frequency = fA = 80MHz

Reading frequency = fB = 50MHz

Burst Length = No.of data items to be transferred = 120.

Duty cycle of wr_enb(write enable) = 50% = 1/2

Duty cycle of rd_enb(read enable) = 25% = 1/4

Case4: fA < fB with idle cycles in both write and read(duty cycles of wr_enb and rd_enb can also be given in these type of questions).

Writing frequency = fA = 30MHz

Reading frequency = fB = 50MHz

Burst Length = No.of data items to be transferred = 120.

No. of idle cycles between two successive writes is = 1.

No. of idle cycles between two successive reads is = 3.

参考链接:https://blog.csdn.net/persistlzy/article/details/108393561
【解析】
数据突发长度(burst length)
首先考虑一种场景,假如模块A不间断的往FIFO中写数据,模块B同样不间断的从FIFO中读数据,不同的是模块A写数据的时钟频率要大于模块B读数据的时钟频率,那么在一段时间内总是有一些数据没来得及被读走,如果系统一直在工作,那么那些没有被读走的数据会越累积越多,那么FIFO的深度需要是无穷大的,因此只有在突发数据传输过程中讨论FIFO深度才是有意义的。
也就是说一次传递一包数据完成后再去传递下一包数据,把一段时间内传递的数据个数称为burst length。在维基百科中,burst transmission是这样解释的:In telecommunication, a burst transmission or data burst is the broadcast of a relatively high-bandwidth transmission over a short period。

知道burst length过后,通过上述讨论大概就知道FIFO的最小深度与burst rate, burst size, read and write frequency等因素有关。要确定FIFO的深度,关键在于计算出在突发读写这段时间内有多少个数据没有被读走。也就是说FIFO的最小深度就等于没有被读走的数据个数。

在讨论之前我们假定模块A向FIFO写数据的时钟频率为fa,模块B从FIFO读数据的时钟频率为fb。

场景1:fa>fb with no idle cycles in both write and read

假设:

写数据时钟频率fa=80MHz
读数据时钟频率fb=50MHz
突发长度= number of data to be transferred = 120
在突发传输过程中,数据都是连续读写的
那么:

写一个数据所需要的时间 = 1/80MHz = 12.5ns
突发传输中,写完所有数据所需要的时间 = 120*12.5ns = 1500ns
读一个数据所需要的时间 = 1/50MHz = 20ns
所以写完所有的突发传输数据需要花费1500ns
在1500ns内能够读走的数据个数 = 1500ns/20ns = 75
所以在1500ns内还没有被读走的数据个数 = 120-75 = 45
因此FIFO的最小深度为45

场景2:fa>fb with two clock cycle delay between two successive read and write

场景2在场景1的基础上增加了一个假设,即读比写慢两拍。这种假设是真正存在的,在异步FIFO设计中,我们需要去判断FIFO的空满来保证逻辑的正确性,判断空满标志需要去比较读写指针,而读指针与写指针处在不同的时钟域中,我们需要采用格雷码和两级同步寄存器去降低亚稳态的概率,而两级同步必然会导致空满标志位的判断至少延迟2个cycle。对于空标志位来说,将写指针同步到读时钟域至少需要花费2个时钟,而在同步这段时间内有可能还会写入新的数据,因此同步后的写指针一定小于或等于(当且仅有同步时间内没有新数据写入的情况下才会等于)当前的写指针,所以此时判断不一定是真空;同理,对于满标志位来说,将读指针同步到读时钟域至少需要花费2个时钟,而在同步这段时间内有可能还会读出新的数据,因此同步后的读指针一定小于或等于当前读指针,所以此时判断并不一定是真满。

通过上述讨论可以知道场景2的FIFO最小深度应该比场景1的FIFO最小深度45略大。

场景3:fa > fb with idle cycles in both write and read

假设:

写数据时钟频率fa=80MHz
读数据时钟频率fb=50MHz
突发长度= number of data to be transferred = 120
每隔1个cycle写一次
每隔3个cycle读一次
那么:

每隔1个cycle写一次,意味着2个cycle才写一个数据
每隔3个cycle读一次,意味着4个cycle才读一个数据
写一个数据所需要的时间 = 21/80MHz = 25ns
突发传输中,写完所有数据所需要的时间 = 120
25ns = 3000ns
读一个数据所需要的时间 = 4*1/50MHz = 80ns
所以写完所有的突发传输数据需要花费3000ns
在3000ns内能够读走的数据个数 = 3000ns/80ns = 37.5
所以在3000ns内还没有被读走的数据个数 = 120-37.5 = 82.5
因此FIFO的最小深度为83

场景4:fa > fb with duty cycles given for wr_enb and rd_enb.

假设:

写数据时钟频率fa=80MHz
读数据时钟频率fb=50MHz
突发长度= number of data to be transferred = 120
写使能信号占整个burst时间比重为1/2
读使能信号占整个burst时间比重为1/4
那么:

场景4与场景3描述不一致,但情形是一致的,因此FIFO的最小深度也为83

场景5:fa < fb with no idle cycles in both write and read

假设:

写数据时钟频率fa=40MHz
读数据时钟频率fb=50MHz
突发长度= number of data to be transferred = 120
在突发传输过程中,数据都是连续读写的
那么:

由于读数据比写数据要快,因此FIFO只起到过时钟域的作用,FIFO的最小深度为1即可

场景6:fa < fb with idle cycles in both write and read

假设:

写数据时钟频率fa=40MHz
读数据时钟频率fb=50MHz
突发长度= number of data to be transferred = 120
每隔1个cycle写一次
每隔3个cycle读一次
那么:

每隔1个cycle写一次,意味着2个cycle才写一个数据
每隔3个cycle读一次,意味着4个cycle才读一个数据
写一个数据所需要的时间 = 21/40MHz = 50ns
突发传输中,写完所有数据所需要的时间 = 120
50ns = 6000ns
读一个数据所需要的时间 = 4*1/50MHz = 80ns
所以写完所有的突发传输数据需要花费6000ns
在6000ns内能够读走的数据个数 = 6000ns/80ns = 75
所以在6000ns内还没有被读走的数据个数 = 120-75 = 45
因此FIFO的最小深度为45

场景7:fa = fb with no idle cycles in both write and read

假设:

写数据时钟频率fa=50MHz
读数据时钟频率fb=50MHz
突发长度= number of data to be transferred = 120
那么:

如果读写时钟同源并且无相位差,那么可以不需要FIFO;否则FIFO的最小深度为1

场景8:fa = fb with idle cycles in both write and read

假设:

写数据时钟频率fa=50MHz
读数据时钟频率fb=50MHz
突发长度= number of data to be transferred = 120
每隔1个cycle写一次
每隔3个cycle读一次
那么:

每隔1个cycle写一次,意味着2个cycle才写一个数据
每隔3个cycle读一次,意味着4个cycle才读一个数据
写一个数据所需要的时间 = 21/50MHz = 40ns
突发传输中,写完所有数据所需要的时间 = 120
40ns = 4800ns
读一个数据所需要的时间 = 4*1/50MHz = 80ns
所以写完所有的突发传输数据需要花费4800ns
在4800ns内能够读走的数据个数 = 4800ns/80ns = 60
所以在4800ns内还没有被读走的数据个数 = 120-60 = 60
因此FIFO的最小深度为60

场景9:Data rates are given,read and write random(important!!!)

在前面几种场景中,我们给的条件都是每隔几个时钟读写一次,这种周期性读写在实际中很常见。但是在工程设计中还存在这样一种情形,只给出数据在一段时间内的读写速率,怎么读写完全随机,这种情况我们需要考虑最坏的一种情况避免数据丢失。在最坏的情形中,读写的速率应该相差最大,也就是说需要找出最大的写速率和最小的读速率。

假设:

写数据时钟频率fa=80MHz
读数据时钟频率fb=50MHz
在写时钟周期内,每100个周期就有40个数据写入FIFO
在读时钟周期内,每10个周期可以有8个数据读出FIFO
那么:

首先这里没有给出数据的突发长度,从假设中可以得出每100个周期就有40个数据写入FIFO,这里可能就有人会说突发长度就是40个数据,其实不是这样的,因为数据是随机写入FIFO的,我们需要考虑做坏的情形,即写速率最大的情形,只有如下图背靠背的情形才是写速率最高的情形,burst length为80

注意:这里需要验证一下是否有解,即写入burst数据时间必须大于等于读出burst数据时间,不然数据就会越累积越多,使得FIFO的深度必须为无穷大。首先写入80个数据需要的时间 = 1/80MHz*(80100/40)=2500ns,读出80个数据需要的时间 = 1/50MHz(80*10/8)=2000ns,由于写入burst数据时间大于对出burst数据时间,因此有解。

下面来计算FIFO最小深度

连续写入80个数据最快所需要时间 = 1/80MHz * 80 = 1000ns
从FIFO中读出一个数据至少所需时间 = (1/50MHz) * (10/8) = 25ns
那么在1000ns内能够读出的数据 = 1000ns/25ns = 40
在1000ns内没有读出的数据 = 80 - 40 = 40
因此FIFO的最小深度为40
【总结】
从上面分析来看,求FIFO的最小深度主要有以下要点:

在求解之前需要验证一下在允许的最大时间长度内写入的数据量是否等于读出的数据量,保证有解;
求FIFO深度需要考虑最坏的情形,读写的速率应该相差最大,也就是说需要找出最大的写速率和最小的读速率;
不管什么场景,要确定FIFO的深度,关键在于计算出在突发读写这段时间内有多少个数据没有被读走;
由于FIFO空满标志位的判断延迟,在实际应用中需要预留一些余量。
下面我们来推导一下FIFO深度的求解公式,假设:

写时钟频率为fwr
读时钟频率为frd
在写时钟周期内,每m个周期内就有n个数据写入FIFO
在读时钟周期内,每x个周期内可以有y个数据读出FIFO
那么:

首先必须满足(1/fwr)(m/n) ≥ (1/frd)(x/y)
”背靠背“的情形下是FIFO读写的最坏情形,burst长度 B = 2*n
写完burst长度数据最快所需时间 T = (1/fwr) * B
从FIFO中读出一个数据至少需要时间 t= (1/frd) * (x/y)
在T时间内能够从都走的数据个数 = T/t = B * (frd/fwr) * (y/x)
在T时间内还没有读走的数据个数 = B - B * (frd/fwr) * (y/x)
因此FIFO的最小深度为 B - B * (frd/fwr) * (y/x)
注意保留一些余量**

补充1

补充2


补充3


2021秋招笔试(1)_乐鑫相关推荐

  1. 2021年秋招面经分享·乐鑫【数字IC设计工程师】

    前言 如果想参考本人的背景情况可见这篇概述 ============================ 正文开始 ============================== [时间线] 6.29 乐鑫 ...

  2. 汇顶科技2021秋招笔试

    来源于读者投稿,作者Angel. 笔试时间:2020.08.24,20:00-21:00 提醒:很多大公司秋招在七八月份就要投递简历,九月已经晚了. 题型: 通用部分 单选10道 不定项选择题2道 填 ...

  3. 中国电信2021秋招笔试

    1.求没出现重复字符的最长字串长度 (我发现每次笔试时候都来不及好好想,就只能暴力,有一些暴力也没过去) 暴力 public static void main(String[] args){Scann ...

  4. [2021秋招笔试记录]远景智能_9.10_算法工程师

    编程题一 n阶乘的结果的末尾有几个零 eg:3!=6 output:0 5!= 120 output:1 def NumberOfZero(n):if n == 1:res = 1res = 1for ...

  5. 涂鸦智能2021秋招笔试编程题

    2道题,60分钟,比较简单 1.给一串包含字母和数字的字符串,从中找到第二大的数字,如果没有第二大的数字,则返回-1 public static int secondHighest (String s ...

  6. 美团2021秋招笔试算法题

    1.小美最近迷上了22这个数字,一天,她发现他的一本书中有一个神秘的大数字.于是她想知道这个数字中有多少子串代表的数字能被22整除. 2.小美所在的城市有很多地铁站,地铁站之间由线路直接连接,组成了一 ...

  7. [2021秋招笔试记录]巨人网络_9.14_数据开发

    编程题一 数据流的中位数,先排序,然后取中间的数 如果是奇数,(1+n)/2 如果是偶数,n/2 (和普通的中位数定义不一样) 输入: 0.01 5.00 55.00 输出: 0.01 0.01 5. ...

  8. shl性格测试_德勤2021秋招网申Tips+SHL笔试原题

    德勤校招时间表及对应的提醒 在线网申+线上笔试 2020年7月31日-2020年10月10日 "路人"说:一定一定一定要安排好网申时间--完成网申,即刻收到笔试,同时在收到笔试的5 ...

  9. 【华为2021秋招】【数字IC】【FPGA逻辑】【笔试解析】【独家】【2021届秋招】【FPGA探索者】【DengFengLai123】

    声明: /********************************************************* 文章首发于公众号,原创作者为 [公众号/知乎:FPGA探索者] [CSDN ...

最新文章

  1. python bottle web框架简介
  2. 用js判断时间的先后顺序
  3. 算法 | 最速降线问题与最小旋转面问题(变分法)
  4. 【数据结构与算法】之深入解析“合并K个升序链表”的求解思路与算法示例
  5. cache control 里 no-cache 和 no-store 的区别
  6. 把百度网站设为首页_网站百度推广效果好不好?怎样才能把网站推广到百度首页?...
  7. python-描述符基本
  8. 开机后系统时间被恶意修改
  9. Atitit.用户权限服务 登录退出功能
  10. Introduction to Computer Networking学习笔记(二十六):HTTP、SPDY
  11. 论文精读 清华ERNIE:Enhanced Language Representation with Informative Entities
  12. 【2023电赛备赛】使用sysconfig对ccs进行图形化编程
  13. hive 的like与rlike,not like,linke not,coalesce函数使用
  14. 22. OP-TEE中TA与CA执行流程-------tee-supplicant(一)
  15. 【踩坑小记】通过maven下载依赖jar包总超时,赶紧用小本本记录镜像站
  16. 安卓上微信闪退的一种解决方法
  17. NEXTCLOUD+onlyoffice的搭建和使用
  18. 【翻新重写】WWDC 后苹果最新 App Store 审核条款!「内附最新开发者指南」
  19. 程序员不能错过的28份技术知识图谱,你的进阶路上必备
  20. c++入门 求圆周长(PTA)

热门文章

  1. 2021年芯片产业发展的五大关键词
  2. 查看oracle关闭重启,oracle 数据库关闭重启
  3. [Xcode 实际操作]七、文件与数据-(18)使用MarkMan与设计师进行心灵沟通
  4. STorM32 BGC 三轴云台学习(一) 通信协议分析
  5. 使用fiddle进行苹果手机app抓包教程
  6. WPS 操作之在指定页插入页码
  7. python微信好友分析源代码_Python简单分析微信好友
  8. Mysql数据库轻松学06—数据分析师常用:数据查询语言DQL之单表查询
  9. Android——UI开发的点点滴滴1
  10. 基于Java的亚马逊“手机”评论爬虫的情感分类分析