联发科 2024届 IC实习笔试分析

news2024/9/20 8:44:49



说明

记录一下  4月19日晚,发哥的一场笔试。分享给需要的 IC 人。

岗位:数字IC设计验证(安徽 合肥)

转载要经本人同意!

我的见解不一定都是准确的,欢迎评论区交流指正~~


1、(20分)很经典的数电题目,请看:

这个数电题目只能说是很经典了;最关键的是处理约束项。

那么关于带约束项的化简,此处给出我的见解,供参考。

约束项的一般形式为:与或式  =  0 (如果不是此种形式,最好化为此种形式);如此题的BC = 0;或者AB +CD = 0;ABC + CD = 0;等等。

直接求解的思路就是,画出卡诺图,把约束式等号左侧的各个与项对应的卡诺图格子画X,即无关项。对本题而言就是将BC(即B=1,且C=1)对应的格子画X。

下面给出具体求解:

2、(5分)简答题,ASIC flow 中综合工具的作用是什么?综合的时候需要SDC文件进行约束,请列举3条SDC的语法。

给出我的见解:综合的作用就是将 HDL 代码映射为期间库中的门级网表。

SDC语法列举:

set_input_delay delay_value -clock clock_ref [–max] [–min] [–clock_fall] [-rise] [-fall] [-add_delay] input_list

create_clock[-add] [-name <clock_name>] -period [-waveform<edge_list>]

set_false_path -from [get_clocks CLKA]-to [get_clocks CLKB]]

3、(10分)智力题(推理题)

文字太烦,本人直接放弃。给大家看看:

(1)2 12 1112 3112 132112 ,问你下一个数是啥?给理由;

下一个数是 311322

(2)有一个小偷费劲力气进入到了银行的金库里。在金库里他找到了一百个箱子,每一个箱子里都装满了金币。不过,只有一个箱子里装的是真的金币,剩下的99个箱子里都是假的。真假金币的外形和质感完全一样,任何人都无法通过肉眼分辨出来。它们只有一个区别:真金币每一个重量为101克,而假金币的重量是100克。在金库里有一个电子秤,它可以准确地测量出任何物品的重量,精确到克。但很不幸的是,这个电子秤和银行的报警系统相连接,只要被使用一次就会立刻失效。请问,小偷怎么做才能只使用一次电子秤就找到装着真金币的箱子呢?

这个题目很经典:

 4、(10分)选择参与过的任一个项目,简述项目内容以及流程,讲述您在项目中承担的任务,挑一项你认为难的地方并阐述解决方案。

5、(5分)用python写一个冒泡排序的函数以及测试程序。

def bubbleSort(arr):
    n = len(arr)
 
    # 遍历所有数组元素
    for i in range(n):
 
        # Last i elements are already in place
        for j in range(0, n-i-1):
 
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]
 
arr = [64, 34, 25, 12, 22, 11, 90]
 
bubbleSort(arr)
 
print ("排序后的数组:")
for i in range(len(arr)):
    print ("%d" %arr[i]),

6、(15分)用Verilog 写一个 Round Robin 仲裁器。模块端口如下:

input clock;

input reset_b;

input [N-1:0] request;

input [N-1] lock;

output [N-1] grant; //one-hot

此处的 lock 输入信号,表示请求方收到了仲裁许可,在对应的lock拉低之前,仲裁器不可以开启新的仲裁。(可简单理解为仲裁器占用)

该题要求参数化编程,在模块例化时可调整参数。也即是说你不能写一个固定参数,比如N=8的模块。

参考波形图:

此题的思路参考:

Round-Robin算法的verilog实现  

结合题目的需求,我在这里给出我的见解:

设计源码:

// ===================================================================================
// 功能:
// 		-1- Round Robin 仲裁器
//      -2- 仲裁请求个数N可变
// 		-3- 加入lock机制(类似握手)
// 		-4- 复位时的最高优先级定为 0 ,次优先级:1 -> 2 …… -> N-2 -> N-1
// By:Xu Y. B.
// ===================================================================================

`timescale 1ns / 1ps
module Round_Robin_Arbiter #(
parameter 		N 		= 		4 //仲裁请求个数
)(
input 							clock,
input 							reset_b,
input 			[N-1:0]			request,
input 			[N-1:0]			lock,
output reg 		[N-1:0] 		grant//one-hot
    );
// 模块内部参数

localparam LP_ST_IDLE      		 = 3'b001;// 复位进入空闲状态,接收并处理系统的初次仲裁请求
localparam LP_ST_WAIT_REQ_GRANT  = 3'b010;// 等待后续仲裁请求到来,并进行仲裁
localparam LP_ST_WAIT_LOCK 		 = 3'b100;// 等待LOCK拉低

// 模块内部信号
reg [2:0]   R_STATUS;
reg [N-1:0] R_MASK;
wire [N-1:0] W_REQ_MASKED;

assign W_REQ_MASKED = request & R_MASK;

always @ (posedge clock)
begin
	if(~reset_b)
	begin
		R_STATUS <= LP_ST_IDLE;
		R_MASK <= 0;
		grant <= 0;
	end
	else
	begin
		case(R_STATUS)
		LP_ST_IDLE:
		begin
			if(|request) //首次仲裁请求
			begin
				R_STATUS <= LP_ST_WAIT_LOCK;
				grant <= request & ((~request)+1);
				R_MASK <= ~((request & ((~request)+1))-1 | (request & ((~request)+1)));	
			end
			else
			begin
				R_STATUS <= LP_ST_IDLE;
			end
		end     
		LP_ST_WAIT_REQ_GRANT://处理后续的仲裁请求
		begin
			if(|request)
			begin
				R_STATUS <= LP_ST_WAIT_LOCK;
				if(|(request & R_MASK))//不全为零
				begin
					grant <= W_REQ_MASKED & ((~W_REQ_MASKED)+1);
					R_MASK <= ~((W_REQ_MASKED & ((~W_REQ_MASKED)+1))-1 | (W_REQ_MASKED & ((~W_REQ_MASKED)+1)));
				end
				else
				begin
					grant <= request & ((~request)+1);
					R_MASK <= ~((request & ((~request)+1))-1 | (request & ((~request)+1)));
				end
			end
			else
			begin
				R_STATUS <= LP_ST_WAIT_REQ_GRANT;			
				grant <= 0;			
				R_MASK <= 0;			
			end
		end   
		LP_ST_WAIT_LOCK:
		begin
			if(|(lock & grant)) //未释放仲裁器		
			begin		
				R_STATUS <= LP_ST_WAIT_LOCK;		
			end		
			else if(|request) //释放的同时存在仲裁请求		 
			begin		
				R_STATUS <= LP_ST_WAIT_LOCK;
				if(|(request & R_MASK))//不全为零
				begin
					grant <= W_REQ_MASKED & ((~W_REQ_MASKED)+1);
					R_MASK <= ~((W_REQ_MASKED & ((~W_REQ_MASKED)+1))-1 | (W_REQ_MASKED & ((~W_REQ_MASKED)+1)));
				end
				else
				begin
					grant <= request & ((~request)+1);
					R_MASK <= ~((request & ((~request)+1))-1 | (request & ((~request)+1)));
				end		
			end
			else
			begin
				R_STATUS <= LP_ST_WAIT_REQ_GRANT;
				grant <= 0;			
				R_MASK <= 0;
			end		
		end		
		default:		
		begin
			R_STATUS <= LP_ST_IDLE;
			R_MASK <= 0;
			grant <= 0;
		end
		endcase
	end
end
endmodule

仿真文件:

// =====================================================================
// 功能:测试模块 Round_Robin_Arbiter 功能 
// By:Xu Y. B.
// =====================================================================

`timescale 1ns / 1ps
module TB_Round_Robin_Arbiter();

parameter 		N 		= 		4; //仲裁请求个数

reg 							clock;
reg 							reset_b;
reg 			[N-1:0]			request;
reg 			[N-1:0]			lock;
wire 			[N-1:0] 		grant;//one-hot

initial clock = 0;
always #10 clock = ~clock;

initial
begin
	reset_b <= 1'b0;
	request <= 0;
	lock <= 0;
	#20;
	reset_b <= 1'b1;
	@(posedge clock)
	request <= 2;
	lock <= 2;

	@(posedge clock)
	request <= 0;

	@(posedge clock)
	request <= 5;
	lock <= 7;

	@(posedge clock)
	lock <= 5;

	@(posedge clock)
	request <= 1;

	@(posedge clock)
	lock <= 1;

	@(posedge clock)
	request <= 0;

	@(posedge clock)
	lock <= 0;

	#100;
	$finish;
end

Round_Robin_Arbiter #(
		.N(N)
	) inst_Round_Robin_Arbiter (
		.clock   (clock),
		.reset_b (reset_b),
		.request (request),
		.lock    (lock),
		.grant   (grant)
	);

endmodule

仿真结果:

 对比给的参考波形,二者一致。

7、(15分)关于DMA寄存器配置,DMA寄存器(地址 0x81050010)表:

Type 表示读写类型。Reset 表示复位值。

写一个C函数 void dma_driver(void),按步骤完成以下需求:

  • 分配DMA所需的源地址(0x30)
  • 分配DMA所需的目的地址(0x300)
  • 设置传输128 Byte 数据
  • 开始DMA传输
  • 等待DMA传输结束

代码写法不唯一,这里给出我的见解:

void dma_driver(void)
{
	unsigned int *prt = (unsigned int *)0x81050010;
	int DMA_SRC_ADDR = 0x30;
	int DMA_DST_ADDR = 0x300;
	int DMA_LENGTH = 128;
	int DMA_START = 0X01;

	// STEP1
	*prt |= DMA_SRC_ADDR << 2; 
	// STEP2
	*prt |= DMA_DST_ADDR << 13; 
	// STEP3
	*prt |= DMA_LENGTH << 24; 
	// STEP4	
	*prt |= DMA_START; 

	while((*prt) & DMA_START)
	{

	}
}

8、(20分)二阶带通滤波器,利用RC组件搭建,通带范围 1kHz~30kHz ,两个电阻 R 均为10kΩ ,问两个电容容值多少?

首先你得知道二阶带通(RC)滤波器的电路长啥样:

基本思路就是计算传输函数,然后找截止频率;由于R1=R1=10kΩ,所以公式推导时均用R表示:(如发现推导步骤有问题,请及时在评论区留言,谢谢

 

 根据最后推导得到的表达式,对于 jwRC2 ,这一项,当 w 趋于无穷大时,uo/ui 趋于零。那么高频的临界点就是 wRC2 = 1+2C2/C1;(此时忽略低频项 1/jwRC1) ;

同理,对于低频项 1/jwRC1, w 趋于无穷小时,uo/ui 趋于零 ,那么低频的临界点就是   1/wRC1 = 1+2C2/C1;

整理:

求解过程用到了MATLAB:

思路参考自: RC频率滤波电路设计

至此,发哥19日晚的笔试题目全部整理完毕,如有问题,请及时告知(评论区留言吧~~)

IC 加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/441243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

滚动条如何设置样式和滚动条悬浮显示与隐藏

文章目录 一、滚动条如何设置样式1&#xff1a;滚动条的默认样式&#xff08;如下图&#xff09;1&#xff1a;html代码2&#xff1a;css代码3&#xff1a;效果图 2&#xff1a;CSS设置滚动条的属性&#xff08;重点&#xff09;3&#xff1a;设置滚动条的例子1&#xff1a;css…

java面经01-基础篇-排序算法、ArrayList、Iterator、LinkedList、HashMap、单例模式

文章目录 基础篇1. 二分查找2. 冒泡排序3. 选择排序4. 插入排序5. 希尔排序6. 快速排序7. ArrayList7.1 初始化:7.2 add扩容7.3 addAll扩容 8. Iterator8.1 ArrayList 源码分析8.2 CopyOnWriteArrayList 源码分析 9. LinkedList10. HashMap1&#xff09;基本数据结构2&#xff…

C#基础学习--LINQ(2

标准查询运算符 标准查询运算符由一系列API方法组成 序列指实现了Ienumerable<>接口的类&#xff0c;包括List<>,Dictionary<>,Stack<>,Array等 标准查询运算符的签名 扩展方法是公共的静态方法&#xff0c;尽管定义在一个类中&#xff0c;但目的是为…

python整活时间到——27行代码一键获取写真集~~~

嗨害大家好鸭&#xff01;我是爱摸鱼的芝士❤ 来吧&#xff0c;直接整活~ 先准备一下 首先咱们需要安装一下这两个第三方模块 requests >>> parsel >>> 不会安装的小伙伴&#xff0c;键盘按住winr 在弹出来的运行框 输入cmd 按确定&#xff0c;然后弹出…

【python中的协程了解一下?】

什么是协程 协程&#xff08;Coroutine&#xff09;是一种比线程更加轻量级的并发方式&#xff0c;它不需要线程上下文切换的开销&#xff0c;可以在单线程中实现并发。协程通常具有以下特点&#xff1a; 协程中的代码可以暂停执行&#xff0c;并且在需要的时候可以恢复执行。…

我的Qt作品(18)模仿Qt Creator IDE写了一个轻量级的视觉框架

Qt Creator的源码比较庞大。前几年我陆陆续续读过里面的源码。也写了几篇博文&#xff1a; https://blog.csdn.net/libaineu2004/article/details/104728857 https://blog.csdn.net/libaineu2004/article/details/89407333 最近一直想找机会&#xff0c;借用这个IDE的皮&…

谷歌Chrome浏览器在新标签页打开书签链接的五个方法

方法一&#xff1a;快捷键Ctrl/Command键 Ctrl/Command 左键单击书签 方法二&#xff1a;右键菜单建立新的标签页 在书签上单击右键选择【在新标签页中打开】 方法三&#xff1a;鼠标中键/拖拽到新标签页 拖拽方法&#xff1a;点击对应书签的文字或者图标——拖拽到浏览器…

Unity出模型动画的序列帧(特效序列帧)

模型动画的序列帧 我这里是通过Recorder和Timeline的结合操作&#xff0c;输出带有透明通道是序列帧图片 流程图 #mermaid-svg-ig9s3Ys4ZkUqP2IW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ig9s3Ys4ZkUqP2IW …

机器学习 day03(成本函数,简化后的和一般情况下的成本函数)

1. 成本函数 平方误差成本函数是最通常用于线性回归的成本函数最终&#xff0c;我们要找到一组w和b&#xff0c;让j函数的值最小误差&#xff1a;ŷ - y 2. 简化后的平方误差成本函数&#xff0c;即b 0 当w 1时&#xff0c;f(x) x&#xff0c;J(1) 0 左侧为f(x)函数&am…

QT笔记——信号转发器之QSignalMapper

QSignalMapper类可以看成是信号的翻译和转发器。 它可以把一个无参的信号翻译成带以下4种参数的信号再转发&#xff1a;int、QString、 QObject以及QWidget 。 应用场景一般是&#xff1a;有一些信号&#xff0c;发送的参数都是一样的情况下&#xff0c;常用的方法是给每一个信…

mapreduce基础: 手写wordcount案例

文章目录 一、源代码二、运行截图 一、源代码 WordCountMapper类 package org.example.wordcount;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper;impo…

[架构之路-169]-《软考-系统分析师》-4-据通信与计算机网络-0-Ad hoc网络(分组无线网络)

目录 什么是Ad hoc网络 adhoc无线网络的历史 ad hoc特点 独立性 结构 通信带宽 主机能源 分布式特性 生存周期 物理安全 adhoc无线网络的结构 adhoc无线网络的应用 什么是Ad hoc网络 Ad hoc是一种多跳的、无中心的、自组织无线网络&#xff0c;又称为多跳网&#xff08;M…

天龙八部手游服务端架设搭建教程

天龙八部手游服务端架设搭建教程 大家好&#xff0c;我是艾西。最近更新游戏搭建教程比较少也被不少小伙伴催更&#xff0c;今天我和大家聊聊天龙八部手游服务端架设搭建。 游戏讲述元佑元年&#xff0c;大宋遭受辽国入侵的故事&#xff0c;玩家可扮演峨眉、丐帮、天山、逍遥、…

SQL Server基础 第一章 (新建,分离,附加)

目录 前言 一&#xff0c;新建数据库 二&#xff0c;分离数据库 1&#xff0c;右键数据库&#xff0c;任务&#xff0c;分离 2&#xff0c;右键数据库&#xff0c;任务&#xff0c;分离 三&#xff0c;附加数据库 前言 本文主要详细介绍SQL server2019的简单使用&#xf…

ESP8266 +I2C SH1106 OLED仿数码管时钟

ESP8266 +I2C SH1106 OLED仿数码管时钟 📌相关篇《ESP8266 +I2C SSD1306 OLED仿数码管时钟》🎞🎬显示效果: 🔖本工程基于Arduino IDE框架下开发。🌿采用esp8266:Nodemcu📑配置参数信息: ✨在上面一篇的基础上做了改版,去除掉了原来在SSD1306那版中获取时间的NTP…

微信小程序制作

小程序是一种在移动设备上使用的轻量级应用程序&#xff0c;不需要下载安装&#xff0c;具有体积小、加载快和用户粘性高的优点。对于创业者和企业来说&#xff0c;开发一个小程序可以帮助他们拓宽商业渠道、增强品牌影响力和提升用户体验。那么&#xff0c;要开发一个小程序&a…

【Spring6】| 简述Spring中的八大模式

一&#xff1a;Spring中的八大模式 Spring中的八大模式&#xff0c;有很多我们前面已经讲过了&#xff0c;这里只需要大概有个印象&#xff0c;后期会出一个专门对23种设计模式的详解&#xff01; 1. 简单工厂模式 BeanFactory的getBean()方法&#xff0c;通过唯一标识来获取…

51单片机(8051系列)最小系统图--内部时钟

最小系统电路图&#xff08;无源晶振&#xff09; 电容的作用 C1,C2&#xff1a;协助晶振起振&#xff08;一般称为负载电容&#xff09; 解释&#xff1a; 负载电容的计算公式CL C1*C2 / &#xff08;C1C2&#xff09; CS 其中CS为电路板的寄生电容一般取3~5pF 一般情况下&…

对表中数据进行删改,基础查询

目录 一.DML&#xff1a;对表中的数据进行增删改 二.DQL 一.DML&#xff1a;对表中的数据进行增删改 1.添加:insert 2.修改&#xff1a;update 3.删除&#xff1a;delete 二.DQL 1.基础查询&#xff1a; 2. 排序查询 3.聚合函数 概念&#xff1a;将一列数据作为一个整体&am…

带你彻底理解栈和队列

文章目录 前言一、栈是什么&#xff1f;二、栈的使用1.方法2.代码实现 三.栈的模拟四.队列1.方法2.代码实现3.循环队列4.双端队列 总结&#xff1a; 前言 今天&#xff0c;带你彻底理解栈和队列。 一、栈是什么&#xff1f; 栈英文叫做stack&#xff0c;是一种特殊的线性表。…