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

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

cb39282b8fb147aaa3a300f70d43c278.png

笔试


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写出输出信号逻辑(中间信号名可自定义)

image.png

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的报告

相关文章
|
6月前
|
SQL Java
java面试题笔试常见选择题大全含答案
java面试题笔试常见选择题大全含答案
|
7月前
|
运维 Linux Docker
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
|
2月前
|
缓存 关系型数据库 MySQL
面试题目总结
面试题目总结
75 6
|
2月前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
|
2月前
|
设计模式 Unix Python
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
|
6月前
|
缓存 Java 数据库连接
java面试题目 强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?
【6月更文挑战第28天】在 Java 中,理解和正确使用各种引用类型(强引用、软引用、弱引用、幻象引用)对有效的内存管理和垃圾回收至关重要。下面我们详细解读这些引用类型的区别及其具体使用场景。
86 3
|
5月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
7月前
|
存储 算法 C语言
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
67 5
|
7月前
|
网络安全 Windows
PentestGPT-V0(1),网络安全面试题2024笔试
PentestGPT-V0(1),网络安全面试题2024笔试
|
6月前
|
数据采集 算法 数据挖掘
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】