1. Design Specifications
- Clock rate = 100MHz
- Synchronous reset
- 입력과 출력 신호는 2채널, 각각 16bit 데이터 크기를 가짐.
- 입력 데이터가 16’h0000 or 16’hFFFF 인 경우는 1 clock cycle 후 그대로 latch 되어 출력(이전 값 유지).
- 그 외 입력 데이터의 경우에는 correction factor(cf)를 곱하여 1 clock cycle 후 출력.
- enable = 1 인 경우에만 위 동작을 수행하고 아닌 경우는 이전 값을 그대로 유지.
2. RTL Design
※ pipe module |
module pipe ( input i_clk, input i_rstn, input i_en, input [1:0] i_cf, input [15:0] i_data0, input [15:0] i_data1, output reg [15:0] o_data0, output reg [15:0] o_data1 ); reg [15:0] r_data0, r_data1; //, o_data0, o_data1; /* DUT explanation: Latch the input data to the output register if it is 16'h0000 or 16h'FFFF. If not, multiply by correction factor(cf). */ always @(posedge i_clk) begin if (~i_rstn) begin r_data0 <= 16'h0; r_data1 <= 16'h0; end else begin if (i_en) begin if ((i_data0 == 16'h0000) || (i_data0 == 16'hFFFF)) begin r_data0 <= i_data0; end else begin r_data0 <= i_data0 * i_cf; end if ((i_data1 == 16'h0000) || (i_data1 == 16'hFFFF)) begin r_data1 <= i_data1; end else begin r_data1 <= i_data1 * i_cf; end end end end always @(posedge i_clk) begin o_data0 <= r_data0; o_data1 <= r_data1; end |
※ pipe interface |
interface pipe_if; logic CLK; logic RSTN; logic [1:0] I_CF; logic I_ENABLE; logic [15:0] I_DATA_IN0; logic [15:0] I_DATA_IN1; logic [15:0] O_DATA_OUT0; logic [15:0] O_DATA_OUT1; logic [1:0] O_CF; logic O_ENABLE; endinterface |