본문 바로가기
HW Design/1. Verilog HDL Basic

[Using Continuous Assignment] 2. Combinational Logic Circuits

by 한PU 2024. 1. 10.
728x90
반응형

 

3 input AND

  • assign 키워드를 통해 모델링
    • 변수명 : and_out
    • type : net type, such as wire
assign and_out = a & b & c;

 

logic


verilog 설계

assign logic_out = (a & b) | c;

Modelling Multiplexors in Verilog

  • 멀티플렉서를 모델링하는 방법은 많다.
    • always block 으로 불리는 construct(구조체) 사용
      • 일반적으로 always block 구조체는 sequential logic 에 사용.
    • 다른 방법은 아래 서술Verilog Conditional Operator
  • 조건 연산자, 삼항 연산자 이용
    // 조건 연산자
    output = <expression> ? <value if true> : <value if false>;

mux 2 to 1

 

assign q = addr ? b : a;

Nested Conditional Operators

  • 일반적이진 않음.

mux 4 to 1

  • 조건 연산자를 이용하여 모델링
    • 2 to 1 mux가 2개 있는것으로 해석
    • 2개의 mux는 어드레스 신호의 LSB를 어드레스 핀으로 사용 
    • assign mux1 = addr[0] ? b : a; assign mux2 = addr[0] ? d : c;
  • 이후, 두 mux의 출력을 가져와서 어드레스 신호의 MSB를 사용하여 둘 중 하나 선택
assign q = addr[1] ? mux2 : mux1;

  • 작동 설명
  • mux 신호 DCBA 기준
  • 00
    • A 출력
    • addr[0] = 0 , addr[1] = 0
    • mux1 = a , mux2 = c
    • q = a 이므로 A 출력
  • 01
    • B 출력
    • addr[0] = 1 , addr[1] = 0
    • mux1 = b , mux2 = d
    • q = b 이므로 B 출력
  • 10
    • C 출력
    • addr[0] = 0 , addr[1] = 1
    • mux1 = a , mux2 = c
    • q = c 이므로 C 출력
  • 11
    • D 출력
    • addr[0] = 1 , addr[1] = 1
    • mux1 = b , mux2 = d
    • q = d 이므로 D 출력
  • 한줄 코딩 가능
assign q = addr[1] ? (addr[0] ? d : c) : (addr[0] ? b : a);
  • 금방 이해가 어려움.
  • 작은 모델링에만 사용

Arrays as Multiplexors

  • 모든 mux의 input을 single array type으로 결합
  • 한 array가 한 element를 가리키도록 주소 지정
  • Combine our input signals into an array
    • declare an array and assign
    • 전체 배열 한번에 할당 
// 각각의 bit를 assign 

assign in_vec[0] = a; 
assign in_vec[1] = b; 
assign in_vec[2] = c; 
assign in_vec[3] = d; 

// 전체 배열 한번에 할당 

assign in_vec = { d, c, b, a }; 
wire [3:0] in_vec = { d, c, b, a }; 

// mux output 연결 

assign mux_out = in_vec[addr];
728x90
반응형