|
昨天去参加nVIDIA公司ASIC Intern的笔试,hr没有告诉我具体地点,一开始走错了地方,去了春晓路122弄34号4号楼,问了下才知道那里是nVIDIA的Physical Design部门,让我去金科路2966号,结果又走了半个多小时才找到,幸好我去的早,要不肯定迟到了,哎,我受伤未愈的脚啊。。。 下午3点准时开始,题量不大,一共6道,也不是很难,第一题是时序问题,第二题写Verilog代码实现同步复位和异步复位的触发器,后面详细说它,第三题画状态图,第四题估算计算结果所需的最小位宽,第五题给条件求FIFO所需的最小长度,第六题是4个人过桥问题,所需最短的时间,很常见了,可我还是想了好一会。 现在还让我很郁闷的事情是,居然第二题做错了,越想越郁闷,这个错误将让我错失这次我很看重的机会,伤心死了。。。 我居然将同步复位的Flip-flop写成异步复位的Flip-flop,然后你可想而知,写异步复位的Flip-flop时我就不知道怎么写了,写成 assign = (!Reset) ? 0 : data_input; 我当时也很纳闷,但我的确不知道应该怎么写,我的理解中同步电路是时钟沿触发,异步电路是电平触发,而平时设计中都直接用异步复位的Flip-flop,还以为那就是同步复位的Flip-flop(当然这些都是我今天查阅一本书后才知道自己错在哪里的)。决定在这里完整的写一下这两个模块,利己利人。 // synchronous reset flip-flop module syn_flipflop(clk, Reset, data_input, data_output); input clk, Reset, data_input; output reg data_output; always @(posedge clk) begin if(!Reset) data_output <= 0; else data_output <= data_input; end endmodule //asynchronous reset flip-flop module asyn_flipflop(clk, Reset, data_input, data_output); input clk, Reset, data_input; output reg data_output; always @(posedge clk or negedge Reset) begin if(!Reset) data_output <= 0; else data_output <= data_input; end endmodule |


