$#@~~转发今天考的Nvidia(英伟达)ASIC笔试题.另求助第一题第二小问

1。将new_A = eco_sel ? ( eco_mask & A ) : A 分别用如下的门实现,用最少门数。
     实现2输入NOR门。

这种让用nor实现的问题以前论坛上就出现过,但是一直没有人给出个答案。这次栽跟头了,不会做!
哪个牛人给个答案阿,也算是造福后人啦!
觉得答案正确的话,一定给加分哈!

附:
n详细笔试题(ASIC)
答的很扯,留题走人。
基本要求:英文作答,不许写Verilog/VHDL,可以用gate或schematic。
1。将new_A = eco_sel ? ( eco_mask & A ) : A 分别用如下的门实现,用最少门数。
     a. 2输入NAND门。b. 2输入NOR门。
2。序列检测,'000', '010', '101',序列可变,000后是010下来是111。
3。Verilog代码查错。原代码基本如下:
always @( sel_and and sel_or and source_a and source_b )
begin
     if( sel_and )
     begin
         data_0 = source_a & source_b;
         sel_0 = 1'b1;
     end
     else if( sel_or )
     begin
         data_1 = source_a | source_b;
         sel_0 = 1'b1;
     end
end

assign sel_1 = sel_xor | sel_nxor;
assign data_1 = sel_1 ? source_c ^ source_d : ~( source_c ^ source_d );

always @( posedge clk )
begin
      if( !rst_ )
          data <= 1'b0;
      else begin
         if( sel_0 )
             data <= data_0;
        if( sel_1 )
             data <= data_1;
end
(代码记不清了,大概就这样)
4。描述function
   a) out_0 = A[0] | A[1] | A[2] | A[3] | A[4] | A[5] | A[6] | A[7];
   b) out_1 = A[0]&A[1] | A[2]&A[3] | A[4]&A[5] | A[6]&A[7] | (A[0]||A[1]) & (A[2]|A[3]) & (A[4]|A[5]) & (A[6]&|A[7]) | (A[0]||A[1]|A[2]|A[3])&((A[4]||A[5]|A[6]|A[7]));
5。使用Perl ,Tcl 或 C实现如下的功能:
     从文件mail.list中读取联系人和联系邮箱,并在其中读取@nvidia.com的联系人,按字母表排序并写入nvidia.list。
    mail.list文件内容大致类似如下:
   <name>    <Email>
   Jenny       Jenny@163.com
   Jojo          jojo@tom.com
   Keke        keke@nvidia.com
   Lily          lily@yahoo.com
6。A,B两人,卖了x头羊,每头羊x dollar,然后分钱。A,B轮流取10 dollar, A先。问是否公平,及建议。

完毕。
没希望了,留给其他人增加经验吧。

[ 本帖最后由 sarahwang 于 2008-10-12 12:47 编辑 ]
我也来说两句 查看全部回复

最新回复

  • samkid (2008-10-11 21:21:01)

    英伟达是什么公司?
  • godspeed1024 (2008-10-11 21:27:22)

    就是NVIDIA嘛

    查错那题没把握。
    用与非门和与或门就是把逻辑函数改成全用与非的形式,遇到要用非门的地方就把两个输入端联在一起作非门用;
    第4题a是检测是否有至少一个1,b是检测是否有至少两个1;
    5没做;
    6后来有人百度了,有答案,反正没做对
  • sarahwang (2008-10-12 12:47:02)

    nor门来表示逻辑,没人会做吗????????????????????
    继续关注1
  • edacnuser (2008-10-12 13:07:03)

    没有仔细做,不过第一题的解题思路:
    1 列出真值表
    2 用卡诺图化简,得到逻辑表达式
    3 用NAND或者NOR实现
  • rainameko (2008-10-12 14:01:15)

    QUOTE:

    原帖由 edacnuser 于 2008-10-12 13:07 发表
    没有仔细做,不过第一题的解题思路:
    1 列出真值表
    2 用卡诺图化简,得到逻辑表达式
    3 用NAND或者NOR实现
    不用列真值表吧
    不就是个类似于MUX嘛
    直接就可以写出来了吧
  • xiog (2008-10-12 14:13:46)

    赞楼主人品
  • clwyl (2008-10-12 16:05:37)

    用NOR门实现的那个应该是考察公式化简的问题吧。
    从new_A = eco_sel ? ( eco_mask & A ) : A  可以得出下面公式:
    1)new_A = (eco_sel & ( eco_mask & A )) | ( ~eco_sel  & A)
    2)   new_A = ((eco_sel & eco_mask) | ( ~eco_sel ) )& A
    3)   new_A = ( eco_mask | ( ~eco_sel ) )& A
    4)   new_A = ~ ( ~( eco_mask | (~eco_sel) ) | (~ A) )
    5)   new_A = ~ ( ~( eco_mask | (~(eco_sel | 1'b0)) ) | (~ (A | 1'b0)) )
    从等式5可以知道new_A可以用4个2输入NOR逻辑门实现。

    [ 本帖最后由 clwyl 于 2008-10-12 16:07 编辑 ]
  • godspeed1024 (2008-10-13 11:12:57)

    QUOTE:

    原帖由 clwyl 于 2008-10-12 16:05 发表
    用NOR门实现的那个应该是考察公式化简的问题吧。
    从new_A = eco_sel ? ( eco_mask & A ) : A  可以得出下面公式:
    1)new_A = (eco_sel & ( eco_mask & A )) | ( ~eco_sel  & A)
    2)   new_A = ((eco_sel & eco_ma ...
    哎呀,没想到去化简,直接先改成全用与非表示的形式了,没得到最简式啊

    [ 本帖最后由 godspeed1024 于 2008-10-13 11:13 编辑 ]
  • zoneinter (2008-10-13 11:53:58)

    QUOTE:

    原帖由 edacnuser 于 2008-10-12 13:07 发表
    没有仔细做,不过第一题的解题思路:
    1 列出真值表
    2 用卡诺图化简,得到逻辑表达式
    3 用NAND或者NOR实现
    赞同这种,感觉更不容易错
  • litholove (2008-10-13 12:31:18)

    new_A = eco_sel ? ( eco_mask & A ) : A =eco_sel&eco_mask&A | ~eco_sel &A
    =~(~eco_sel|~eco_mask|~A)|~(eco_sel|~A)
    =~(~(~(~eco_sel | ~eco_mask))|~A) | ~(eco_sel|~A)
    最后将 ~x 替换成~(X| 0)
  • godspeed1024 (2008-10-13 12:52:38)

    序列检测做错了。一共只有8个状态,当时写出11个


    SequenceDetection_FSM_B.jpg

  • godspeed1024 (2008-10-13 12:55:03)

    话说回来,不管化没化到最简,任意一个逻辑表达式总可以只用NOR或NAND门表达出来。
    因为逻辑表达式的形式无非是“与-或”式或“或-与”式
  • godspeed1024 (2008-10-13 12:57:38)

    QUOTE:

    原帖由 litholove 于 2008-10-13 12:31 发表
    new_A = eco_sel ? ( eco_mask & A ) : A =eco_sel&eco_mask&A | ~eco_sel &A
    =~(~eco_sel|~eco_mask|~A)|~(eco_sel|~A)
    =~(~(~(~eco_sel | ~eco_mask))|~A) | ~(eco_sel|~A)
    最后将 ~x 替换成~(X| 0)
    这个也是我当时的做法,不过这样就用了不止4个门了。还是没注意到一开始可以提出A化简
  • wogan (2008-10-13 16:46:32)

    QUOTE:

    原帖由 edacnuser 于 2008-10-12 13:07 发表
    没有仔细做,不过第一题的解题思路:
    1 列出真值表
    2 用卡诺图化简,得到逻辑表达式
    3 用NAND或者NOR实现
    既然有逻辑表达式了,就不用列真值表,直接上卡诺图
  • skywolftf (2008-10-14 10:30:28)

    顶,好心人!
    呵呵,不知道题目咋样?反正感觉除了那个C、Tcl以外的!其他还行!
  • wu.weihai (2008-10-14 23:40:19)

    1:化简 new_A = (~eco_sel | eco_mask) & A ;
    令X=A&(B|~C)= (A NOR 0) NOR ((B NOR 0) NOR C)
    令X=A&(B|~C)= (A NAND B) NAND((C NAND 1) NAND A)
    2:状态机列个表
             0    1
    0      S0 :S1  S0
    00    S1 :S2  S0
    000  S2 :S2  S4
    011  S3 :S2  S3
    001  S4 :S6  S3
    011  S5: S6  S5
    010  S6 :S5  S7
    101  S7 :S1  S0
    3:欢迎大家找茬
    4: 已解答
    遇到这样的题目大家可以用特殊值代入测试
    因为是对称表达式另A[0]=1
    表达式可以简化为Out=A[1] |A[2]&A[3]|A[4]&A[5]|A[6]&A[7]|A[2]|A[3]|(A[4]|A[5])&(A[6]|A[7])|(A[4]|A[5]|A[6]|A[7])
    ===> Out = A[1]|A[2]|A[3]|A[4]|A[5]|A[6]|A[7];
    很显然这是这个表达式 啥意思自己看.
    不需要搞那么复杂,毕竟面试时候不会给你那么多时间.
    适当运用数学知识 事半功倍
    5:经常写脚本的大侠应该很熟 排序么?用TCL还不会.
    6:肯定不公平,A,B轮流取x/2 Dollar 这样才公平.就是不知道A,B俩人各有几只羊?

    欢迎指正

    [ 本帖最后由 wu.weihai 于 2008-10-15 09:10 编辑 ]
  • wu.weihai (2008-10-14 23:43:00)

    A,B轮流取1 dollar 也比较公平 但是羊一多,必然会消耗大量的时间分钱 呵呵
  • t87829472 (2008-10-15 00:58:53)

    先从钱里拿一张给B然后让A先抽
  • robberpk (2008-10-15 21:57:33)

    我再年轻点就好了
  • lausren (2008-10-18 11:39:44)

    new_A = eco_sel?(new_mask&A):A;
                            = (eco_sel&new_mask&A)|(~eco_sel&A)
                            = ((eco_sel&new_mask)|(~eco_sel))&A
                            = (new_mask|~eco_sel)&A
                           
                           
    NOR实现,此时需要将&转化成用|来表示

    &            
    X Y Z
    0 0 0
    0 1 0
    1 0 0
    1 1 1

    |
    X Y Z
    0 0 0
    0 1 1
    1 0 1
    1 1 1

    ===> A&B = ~(~A|~B)
    ====>new_A = ~((~(new_mask|~eco_sel))|(~A))
                                                    = ~((new_mask NOR (eco_sel NOR 0))|(A NOR 0))
                                                    = (new_mask NOR (eco_sel NOR 0)) NOR (A NOR 0)
                                                   
    nand来实现,此时需要将|转成用&来实现
    =====>A|B = ~(~A&~B)
    =====>new_A = A&new_mask | A&(~eco_sel)
                                                    = ~(~(A&new_mask) & ~(A&(~eco_sel)))
                                                    = ~((A nand new_mask) & ~(A & (eco_sel nand 1)))
                                                    = ~((A nand new_mask) & (A nand (eco_sel nand 1)))
                                                    = (A nand new_mask) nand (A nand (eco_sel nand 1))