Tag Archives: Career

M面

不管怎样最终都会问到detail所以就算过去了也要好好搞清楚特别是带*的。

“啊你熟悉MIPS?那就讲讲MIPS吧。”

Pipeline stage? 5stages, IF/ID/EX/MEM/WB
Why using pipeline? throughput
What’s the side effect of pipeline? latency, data hazard
|
*Well, hazard, how many kinds of hazard and how to solve?
RAW-forwarding/WAW?/WAR?
Stall
Control hazard-instruction predicting, branch predicting.
*What to do if branch predicting failed, make incorrect predict?

Sequential logic, D flip flop
Writing verilog code: D flip flop? and D latch? First asynchronous reset then modify to synchronous reset/add enable signal
Draw circuit diagram for D flip flop with en, two ways?
Setup time? Hold time? If input signal does not meet the timing requirement what’s the output and behavior of this Dff?
|
*Synchronizer: a simple level sensitive synchronizer, glitch, (detail information): What’s the output of the first Dff if it is under metastable state? And what will the final output be and why the final output can be synchronized? draw clock sequence diagram, show the metastable state of first output and explain.

Memory system in microprocessor
*What is a cache? how does it work? temporal and spatial re-use principle.
Three kinds of mapping between cache and main memory? direct association, N-way set association and fully association.
*What’s the different between N-way set association and fully association?
*Given a cache of 32k in size, 32bytes line, tell me what’s the structure of this cache, how many sets and tags in the cache.
|
*Do you familiar with memory management unit, or TLB? (reference provided by wiki, MMU, TLB) //完全不会,需要恶补

Some topic on verification flow, your project experience and what did you do for your project, in detail.

张江的冷风不输安亭。

约好下午三点,结果咱一点半就从地铁站屁颠屁颠出来了。然后扭了一会儿找到有轨电车的车站,坐到终点摸索着门牌号到了47#楼门前。跟前台确认自己的名单他们还扑哧一笑“提前这么早”,然后就在旁边坐等面试了。无聊翻翻自己的笔记发现没啥可看的,于是翻出包里的《狐的故事》继续读。

约莫到两点半左右开始面试,进来的人很和蔼,先随便看了看简历然后就开始问现在在实验室做的事情。我blablabla了一会儿就被问道项目里测试环境怎么搭,软硬件怎么分,什么工具……然后让我拿支笔在白板上面写一个Hello world……“我随便你用什么语言写”。太有趣了哥哥,写完C就写了个Perl,然后要求我程序带参数。乱涂乱画之后,下一题是给一个开头带有引用的文本,如何写一个程序在读到这句的时候展开引用文档内容,仍然是“我随便你用C啊,Perl啊,Python啊,Ruby啊什么写都行”。乱涂乱画中被提醒到使用递归,“你有没有考虑过b.txt也有include呢”,“还有倘若b.txt回归引用了a.txt怎么办”。程序我没写完整,最后是面试官上前在白板上帮我修改补完的OTL。

接下来写了一个4位adder的verilog,这个没什么挑剔的,聊了聊部门的情况以后就换了一位来面我。相比于前一位月牙笑容,这个可是川眉紧缩一丝不展的哟。进来还是开口就问实验室项目,然后是实验室情况,实习放不放人等等(心虚)。接着给了我一张纸让我写一个函数实现读一段只有字母与空格的字符串让我输出长度大于三个字母的单词个数。我也是啃了半天while和if判断才写好的,幸好没怎么挑剔。我看他脸色一直很淡定,程序读完说ok时才放松。然后被问道汇编语言时我就囧了,说自己在本科时候接触过一点MCU的汇编编程,他马上问我指令集,“你看,比如好了,x86的指令集都有哪些?”我说我不清楚,不过最基础的处理器也有取址解码运算存结果读写寄存器这五类,比如LDA、STA、ADD、MOV还有分支跳转BEQ之类。下一个问题更寒:那x86有哪些寄存器,答不上来,于是换成“寄存器你知道是什么吗?”。我马上摇头,Register呵呵最简单的就是D触发器,就扯到Verilog下时序逻辑和组合逻辑的区别、如果if-else还有case情况不完整时候会综合出latch这些问题了,最后一个答不上来的问题是:如果仿真波形里出现一个X信号,这说明逻辑里有什么样的情况……大神救救我。

感觉这次问的最多的还是实验室里的事情,我在这两三个小时里口干舌燥的花了最多的时间来讲Decoder的C model和hardware,以及进度和现在相匹配的测试工作,问测试问的最为详细,提取什么东西怎么做使用什么工具或者语言……话说这不算机密泄露吧www

晚上挤车回去的时候也接到了nv的电话,和他们交代了一些基本情况,商量intern的期限和面试的时间,可那边让我先回去填好Questionnaire再和HR商量再定。233,快一点呐不然下周我就只好去A社卖身了。

f2f preparation

佛祖保佑祖宗显神通八百万神保佑保佑我猛看一周末了让我一次通过吧!

======================C======================
1)C++和C的区别,C++的高级特性,分别阐述。
#define => const
const不仅可以用来声明不变的常量,这个关键词更大的用处是保证函数的输入参数不可更改增强健壮性。另外它需要指定常数的数据类型,防止编译器在隐含类型转换时出现意外的危险。
value parameter/address parameter => reference parameter(&n=m)
函数参数的引用传递与传值和传址都不相同,引用相当于对源变量起“别名”,实现传址参数的便利同时也避免了对指针过于危险的修改。
class: constratuctor func, destraturctor func
C++的一大高级特性便是基于类的数据类型以及面向对象的程序体系。类的封装把对象的变量、操作方法一并封装并定义了公共部分(public function)与私有部分(私有数据类型),用户不必或无权了解对象内部的实现专注于操作方法。

printf,scanf => iostream <<, >>

2)冒泡法,快速排序。
bubbleSort 每次比较小数上浮,大数沉底,循环至有序

if (A[i]>A[i+1])
{
	swap(A[i], A[i+1]);
	swapped_flag=true;
}

类似的还有鸡尾酒排序,试图从两边双向的分离泡沫与石头。
quickSort 分而治之,设定一个pivot_idx(一般位于数组中部)并与其他元素比较,使其不小于所有左侧元素并不大于所有右侧元素。第二步将左右两部分使用同样的方法二分排序,直到递归调用至两元素相比。

3)写一个虚函数。
虚函数是C++实现多态性的机制,通过基类访问派生类定义的函数。同名的函数该调用基类还是派生类并非编译时确定,而是运行的时刻决定,即动态联编。

class Base_A
{
	public:
	virtural void foo() 
              {cout<foo();                   //却调用了Derived_B的成员函数
}

4)写一个位操作的函数。

#define CHIP_SEL		0x1000
#define BUS_CMD_ADDR	0x0800+CHIP_SEL
int main()
{
int reg_ctrl_addr=0x0000, reg_ctrl_val=0x0000;
//......
reg_ctrl_addr=(BUS_CMD_ADDR+0x40);
reg_ctrl_val=reg_val_read(reg_ctrl_addr);
int stat=(reg_ctrl_val&0x000f);
int disp_num=(reg_ctrl_val&0x00f0)>>4;
//……
}

======================perl======================
1)匹配一个IP

/^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[4-9][0-9]|25[0-5]\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[4-9][0-9]|25[0-5])$/

*匹配一个email地址

/^(\w+[\.]\w*)+@(\w+\.\w+)$/

*并排序

@newlist = sort {(ab) || (a cmp b)} @old_list

2)谈谈对perl的理解
灵活,便利,贴近自然语言,与unix和C密不可分……

3)正则表达式的贪婪性,以及一些小问题
模式匹配的组合模式中,若既可匹配数个字符又能匹配数十个字符,则每次模式都将贪吃的匹配它最大长度的字符
比如
$_=”fred xxxxxxxxxxx barney”;
s/x+/boom/;
最后被替代的会是所有x而不是一或两个x字符

4)hash的特点什么的。
hash关联的key与value一一对应,如同索引与档案……

======================电路 verilog======================
1)画一个触发器和除法器门级电路
一个边沿敏感的D-latch组成主从结构,从而成为脉冲敏感的D flip-flop
除法器……我建议考查运算量很小的情况下使用Rom查表
一位全加器
Sum=A^B^Cin; Cout=AB+BCin+ACin
一位乘法器
二选一mux
out=AS+BnS, 用传输门实现

2)用verilog写一个4位的加法器,写一个模三计数器

module adder_4bit(in_a, in_b, in_carryi, out_sum, rst, clk)
parameter bitwidth=4;
input [bitwidth-1:0] in_a;
input [bitwidth-1:0] in_b;
input in_carryi;
input rst;
input clk;
output [bitwidth:0] out_sum;

reg [bitwidth-1:0] in_a;
reg [bitwidth-1:0] in_b;
reg [bitwidth-1:0] out_carryo
wire in_carryi;

always@(posedge clk)
	if (!rst)
		out_sum

3)@(posedge )和 @ * 的区别
对上升沿信号有效与对所有信号有效

4)setup time,hold time画图说明,不满足的话怎么解决。
tsu: 在寄存器时钟触发沿之前数据信号必须保持稳定有效的时间
thold: 在寄存器时钟触发沿之后数据信号必须保持稳定有效的时间

* 状态机,同步/异步实现
* System Verilog与verilog区别

======================系统结构======================
1)pipeline,为什么流水,流水线的结构,怎么解决数据,控制冲突。
Advantages:
Allows us to increase throughput, by breaking up long combinational paths and (hence) increasing clock frequency
Disadvantages:
May increase latency…
Only as good as the weakest link: slowest step constrains system throughput.

Data hazard, Structural hazard, Control hazard
RAW,WAR,WAW,解决数据冲突:Insert nops in code at compile time/Rearrange code at compile time/Forward data at run time/Stall the processor at run time
分支跳转beq 控制冲突,解决:分支预测

2)virtual memory的结构,存储体系的结构。
(main memory->disk memory) cache与virtural存储结构,两级
多个层次的存储器
Register Files
Buffers(Lookahead)
Cache
Main Memory
Online Storage
Off-line Storage

3)risc的register file有什么特点 和cisc有什么区别。

======================linux======================
1)常用的命令

======================others======================

十月计划

下午prof过来,把我们统一划分到了解码组。所里的安排计划如下:
decoder:
纠错——C mode已完善,需要迁移至RTL实现。
MBAFF——模块调试工作完成进度,包括DBST接口(马王张)
多路decoding——整体架构大改动,目的实现4路FullHD/8路720p/16路480p实时解码
encoder:
RTL模型空白

我接手MBAFF的部分,需要了解Macroblock的预测/DDR数据分配。等这些做完则转入encoder实现。

花十个月做这些事情,希望自己早点完成提前出去多多实习。

也许实习5个月,休2个月,再出去5个月是个不错的折衷,但似乎我们更加忙碌一些。