728x90
반응형
- assign 키워드를 통해 모델링
- 변수명 : and_out
- type : net type, such as wire
assign and_out = a & b & c;
verilog 설계
assign logic_out = (a & b) | c;
Modelling Multiplexors in Verilog
- 멀티플렉서를 모델링하는 방법은 많다.
- always block 으로 불리는 construct(구조체) 사용
- 일반적으로 always block 구조체는 sequential logic 에 사용.
- 다른 방법은 아래 서술Verilog Conditional Operator
- always block 으로 불리는 construct(구조체) 사용
- 조건 연산자, 삼항 연산자 이용
// 조건 연산자 output = <expression> ? <value if true> : <value if false>;
assign q = addr ? b : a;
Nested Conditional Operators
- 일반적이진 않음.
- 조건 연산자를 이용하여 모델링
- 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
반응형
'Verilog HDL > 1. Verilog HDL Basic (문법)' 카테고리의 다른 글
[Verilog Tutorial] level-4 Using Continuous Assignment 모음 (0) | 2024.01.10 |
---|---|
[Using Continuous Assignment] 3. 예제 풀이 (0) | 2024.01.10 |
[Using Continuous Assignment] 1. 연속 할당 in 베릴로그 (0) | 2024.01.10 |
[Verilog Tutorial] level-3 Verilog Operators 모음 (1) | 2024.01.04 |
[Verilog Operator] 8. 예제 풀이 (1) | 2024.01.04 |