【数字设计】恒玄科技_笔试面试题目分享

芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球
四社区联合力荐!近500篇数字IC精品文章收录
【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍

在这里插入图片描述

笔试

1、 用verilog描述一个debounce逻辑。

//Debounce是一个防抖函数,相当于硬件电路中的按键开关所做的防抖。
module debounce(
input clk
input nrst
input press
output press_value
output press_flag);

reg [3:0] cnt;
reg press_reg;

always@(posedge clk or negedge nrst)
if(!nrst)

begin
cnt<='d0;
press_reg<='d1;
end

else if(press_reg!=press && cnt<4'b1111)
cnt <= cnt + 1'b1;
else if (cnt == 4'b1111)
cnt<= 'd0;
else
press_reg<=press;


assign press_value = (cnt == 4'b1111)?press:0;

endmodule

2.下图为符合某一特征多项式的移位寄存器链,用verilog写出输出信号逻辑(中间信号名可自定义)
在这里插入图片描述

module LFSR(
input data_in,
input clk,
input nrst,
input [7:0] seed;
output data_out);

reg [7:0] lsb;

reg out
always@(posedge clk or negedge nrst)
if(!nrst)
lsb <= seed;
else
data_out <= lsb[7] ^data_in;
lsb[0] <= lsb[7] ^data_in;
lsb[1] <= lsb[7] ^data_in ^lsb[0];
lsb[2] <= lsb[7] ^data_in ^lsb[1]
lsb[3] <=lsb[2];
lsb[4] <=lsb[3];
lsb[5] <=lsb[4]^lsb[7] ^data_in;
lsb[6] <=lsb[5];
lsb[7] <=lsb[6]^lsb[7] ^data_in;

endmodule

3.用verilog实现一个2.5分频电路

module (
input clk_in,
input nrst,
output clk_out); 

reg clk_p, clk_n;
always@(posedge clk or negedge nrst)
if(!nrst)
clk_p <= 1'b0;
else
clk_p <= ~clk_p;

always@(nesedge clk or negedge nrst)
if(!nrst)
clk_n <= 1'b0;
else
clk_n <= ~clk_n;


assign clk_out = clk_n & clk_p;

endmodule

4、 如何实现一个数字2倍频电路(思路即可)

一个同或门与一个时钟上升沿有效的D触发器(连接成翻转器)组成,同或门的输入为D触发器输出的非和clk_in,同或门的输出为clk_out;

5.画一个状态机用来检测串行输入的101011序列

6.怎么解决芯片STA分析中出现的setup violation和hold violation

Set up violation 减少寄存器中间的组合逻辑电路的数量,重定时或做成流水线(加寄存器),使用更先进set up time小的工艺库等
Hold violation 加buffer

7.设计一个多时钟切换模块,需要注意哪些方面

时钟切换过程中可能会产生毛刺,
时钟切换前后的频率
Clock切换前后的clock jetter/时钟质量
等等

8.一个1bit信号A和一个10bit信号B,在跨时钟域传输处理上有何异同

单bit信号按照时钟域快慢切换的不同,慢到快可以打两拍,快到慢可以采用电平同步器和脉冲同步器的设计方法
多bit不能采用简单的打两拍,需要采用如异步FIFO,握手信号等方法做跨时钟域

9. 用verilog实现两个8bit有符号数A,B的求和运算,并保证最后的和在-64~63之间//默认有符号数AB的输入形式是原码

module signed_add (
input [7:0] A,
input [7:0] B,
output [8:0] C);

wire [7:0] complement_A;
wire [7:0] complement_B;
wire [8:0] complement_C;

//求AB的补码
assign complement_A = A[7]? {A[7],~A[6:0]}+1'b1: A  ;
assign complement_B =  B[7]? {B[7],~B[6:0]}+1'b1: B  ; 

assign complement_C = complement_A + complement_B;

assign C = ($signed(complement_C)>(-64) && $signed(complement_C)<(63) ) ? complement_C[7:0]0 ;

//输出的C也是补码形式,不同工具对补码的表示不一定都支持,有需要再换成原码即可

endmodule

10.设计一个8bit输入的mod 3运算模块(实现思路即可)

mod3运算:除三的余数
使用状态机,除以三的余数的可能性为0,1,2,一共三种状态
8bit输入放在寄存器中
再使用一个从零开始的计数器,每个时钟上升沿自增1,直到和8bit输入相等
在这个过程中,0-1-2-0-1-2,三种状态循环改变
最后相等的时候对应输出所在状态代表的余数即可

一面

聊天,应该没啥培养体系,进来就干活,一对一带教

复试

一个串并转换模块的验证testbench搭建和verificationspec的报告

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张江打工人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值