2014-09-26 2 views
0

ModelSim을 사용하고 ALU를 구현 중입니다.데이터 흐름 Verilog에서 벡터를 사용하는 방법과 사용하지 않는 방법은 무엇입니까?

assign {cout,dst} = (op_i == add) ? scr0+scr1+cin: 
        (op_i == sub) ? scr1-scr0: 
        (op_i == shift_l) ? {scr0[15:0],cin}: 
        (op_i == shift_r) ? {scr0[0],cin,scr0[15:1]}: 
        (op_i == ar_shift_r) ? {scr0[0],scr0[15],scr0[15:1]}: 
        (op_i == par) ? { ^scr0,scr0[15:0] } : 
        (op_i == rotate)? {scr0[14:0],scr0[15]}: 
        (op_i == Nor) ? (scr1 ~| scr0) : 
        17'h00000; 

마지막 Nor 나에게 오류를주고있다 :이 할당 부분이다. 내가 노팅하는 대신 오링을 시도하면 효과가있다. 그러나 ~|은 예기치 않은 ~| 오류를 표시합니다.

답변

4

SystemVerilog에서 ~| 연산자는 단항 NOR입니다. 그것은 벡터의 모든 비트를 합쳐서 NOR 화하는 이유입니다. 비트 배타적 NOR 연산자 인 ~^ 또는 ^~이 있지만 NOR는 없습니다. 당신이 비트를 구현하려면

NOR, 당신은 비트 단위 부정하여 비트 OR 다음을 수행해야합니다

~(scr1 | scr0)

+0

예 도움이되었습니다. –

0

~|단항 감소도입니다. SystemVerilog에는 바이너리 또는 연산자가 없습니다. 원하는 경우

!(scr1 | scr0) 
+1

실제로 이것은 1 비트 결과를냅니다. Tudor가 제안한대로 그것을 얻기 위해 ~ (scr1 | scr0)을 사용했습니다. –

관련 문제