Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- vivado
- hc-sr04
- prescaling
- Recursion
- behavioral modeling
- uart 통신
- Algorithm
- atmega 128a
- Edge Detector
- LED
- DHT11
- pwm
- KEYPAD
- stop watch
- gpio
- dataflow modeling
- D Flip Flop
- BASYS3
- i2c 통신
- ATMEGA128A
- soc 설계
- Linked List
- structural modeling
- ring counter
- Pspice
- FND
- java
- half adder
- verilog
- test bench
Archives
- Today
- Total
거북이처럼 천천히
Verilog RTL 설계(7월 15일 - 4, PISO Shift Register) 본문
1. PISO Shift Register (Parallel Input Series Output)
- 병렬 형태로 입력 값을 입력 받아 레지스터에 저장한 뒤, 레지스터의 저장된 데이터를 Shift시켜 직렬형태로 하나씩 출력시키는 구조를 갖는 레지스터
- PISO Shift Register는 아래와 같은 회로 구조를 갖는다.
- Q) 입력 단자 부분에 왜 MUX가 있으며, MUX는 어떤 역활을 수행하는가?
- A) PISO Shfit Register가 Read로 동작할 때와 Write로 동작할 때의 경우의 수로 나누어 생각해야한다.
Write 로 동작할 경우)
- 4bit 데이터를 한 번에 Parallel 형태로 입력받아야 한다.
Read 로 동작할 경우)
- 출력선 하나이기 때문에 D Flip Flop A부터 D Flip Flop D 방향으로 Shift 시키며, 레지스터에 저장된 데이터를 출력시킨다.
위 동작 처럼 하나의 단선을 가지고, 2가지 작업 (입력값을 Write하는 작업, 출력값을 Shift하는 작업)을 수행해야 하기 때문에 MUX를 이용하여 Selector를 통해 2가지 작업 중 상황에 맞게 하나의 작업을 선택하여 수행하게끔 하는 것이다.
Selector는 Write_enable 변수 값을 통해 컨트롤하게 된다.
2. N bit PISO Shift Register by using parameter
< Source >
module PISO_Nbit_Shift_Register_by_using_shift_enable #(parameter N = 8)(
input clk, enable, reset_p,
input [N-1 : 0] input_data,
input shift_load_p,
output output_data );
reg [N-1 : 0] piso_reg;
always @(posedge clk or posedge reset_p) begin
if(reset_p) piso_reg <= 0;
else if(enable) begin
if(shift_load_p) piso_reg <= {1'b0, piso_reg[N-1 : 1]};
else piso_reg = input_data;
end
end
assign output_data = piso_reg[0];
endmodule
- shift_load_p 변수 값이 1이면 새로운 데이터 값을 입력 받지 않고, 기존에 있던 데이터들을 오른쪽으로 Shift한다.
- shift_load_p 변수 값이 0이면 새로운 데이터 값을 입력 받아서 레지스터에 저장한다.
- 중요) assign output_data = piso_reg[0];
→ 해당 명령문의 실행 조건을 보게 되면 어떤 조건없이 실행이 가능함을 확인할 수 있다.
→ 따라서 시뮬레이션이 실행하는 동안 계속해서 piso_reg[0] 데이터를 출력으로 내보내고 있는 상태이다.
< Test bench >
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2024/07/16 16:02:20
// Design Name:
// Module Name: tb_PISO_Nbit_Shift_Register_by_using_shift_enable
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module tb_PISO_Nbit_Shift_Register_by_using_shift_enable( );
// Set type of Input / Output.
reg clk, enable, reset_p;
reg [5:0] input_data;
reg shift_load_p;
wire output_data;
// Data
parameter data = 6'b110101;
// Create Instance.
PISO_Nbit_Shift_Register_by_using_shift_enable #(.N(6)) DUT(
clk, enable, reset_p, input_data, shift_load_p, output_data );
// Initialization of simulation.
initial begin
clk = 0; enable = 1; reset_p = 1; shift_load_p = 0; input_data = 0;
end
// Set clock pulse.
always #5 clk = ~clk;
// variable
integer i;
// processing of simulation.
initial begin
#10;
// Disable reset_p and write data.
reset_p = 0;
input_data = data; #10;
// Enable shift_load_p
shift_load_p = 1;
#10;
// Enable shift_load_p and read.
for(i = 0; i<7; i = i+1) #10;
$finish;
end
endmodule
< Simulation >
- 0 ~ 10ns : initialization of simulation 영역이 실행
- 10ns ~ 20ns : disable reset_p 동시에 input_data 단자에 data 값을 넣는 중이다.
- 20ns ~ 30ns : enable shift_load_p
- 30ns ~ : left shift하면서 데이터를 출력한다.
- Q) 왜 shift_load_p가 활성화되기 전에 왜 먼저 output_data가 출력되는가?
A) assign output_data = piso_reg[0]; 명령문의 실행 조건을 보아라. 특정 조건을 만족해야 실행 되는가? 아니다. 즉, piso_reg[0] 값 출력은 시뮬레이션이 실행하는 동안 계속 출력으로 나가고 있다. 따라서 shift_load_p가 활성화 되기 전에 먼저 출력되는 것은 이상하지 않다.
'RTL Design > Verilog RTL 설계' 카테고리의 다른 글
Verilog RTL 설계(7월 16일 - 2, SRAM) (0) | 2024.07.16 |
---|---|
Verilog RTL 설계(7월 16일 - 1, PIPO Shift Register) (0) | 2024.07.16 |
Verilog RTL 설계(7월 15일 - 3, SISO Register, SIPO Register) (2) | 2024.07.16 |
Verilog RTL 설계(7월 15일 - 2, Register, TestBench) (0) | 2024.07.15 |
Verilog RTL 설계(7월 15일 - 1, 오전 내용 복습) (2) | 2024.07.15 |