Verilog(9)
-
verilog 12 cpu설계-2
Function unit 앞서 cpu의 연산 결과와 RAM에서 온 데이터를 잠시 저장하는 레지스터 파일을 제작하였다. 이번에는 연산을 수행하는 연산장치인 Function unit 설계이다. Function unit은 ALU와 Shifter로 구성되어 있다. ALU 산술논리연산장치는 산술연산기와 논리연산기로 나뉜다. 산술연산장치는 1비트 전가산기 16개를 연결하여 16비트 산술연산 기를 구현하였다. 산술 연산기 module arithmetic #(parameter WD = 16)( input[WD-1:0] A,B, input carry_in, select_0, select_1, output carry_out, ovf_flag, output[WD-1 : 0] sum ); wire carry_wire[WD :..
2023.03.27 -
verilog 11 cpu 제작_1
디지털 시스템의 구성 datapath 모듈 : 데이터 처리, 레지스터, 연산기, MUX CU 모듈 : 제어신호 발생, 연산의 순서지정 RTL(Register Transfer Level) reg단위의 연산 reg 데이터의 이동 / 처리 reg set, operation, sequence control Micro-operation reg에 저장된 데이터에 대한 기본연산 단위 기본적으로 1 클럭동안에 수행됨 레지스터 전송 연산 마이크로 연산 이동, 산술, 논리, 시프트 논리 마이크로 연산 AND 마스크 : OR 마스크 : XOR 마스트 MUX를 이용한 전송 연결 여러 개의 레지스터가 있을 때 그중 하나의 레지스터를 선택하기 위해 MUX를 사용 if(K1) R0
2023.03.20 -
verilog 10 FSM/ASM
FSM : 지정된 수의 상태로 상태들 과의 천이에 의해 출력을 생성하는 회로 디지털 시스템의 제어회로 구성에 사용 무어 머신(Moore Machine) : 출력이 현재상태에 의해서만 결정, 동기형 출력 밀리 머신(Mealy Machine) : 출력이 현재상태와 입력에 의해서만 결정, 비동기형 출력 FSM은 보통 3부분으로 구성된다. 현재상태를 기억하는 레지스터 다음상태를 계산하는 논리회로(조합회로) 현재 출력을 계산하는 조합회로 FSM의 코딩 가이드라인 FSM의 상태 이름을 Parameter 또는 localParam으로 정의해서 사용한다. module fsm_v1( input clk, rst, x, output reg y ); localparam [1:0] S0 = 2’b00, S1 = 2’b01, S2..
2023.03.17 -
verilog 9 카운터 실습
FPGA 보드 실습 FPGA LED 카운터 실습 `timescale 1ns / 1ps module counter_mode_16( input clk, rst, output reg [3 : 0] q, output tco //carry out ); always @(posedge clk, posedge rst) begin if(rst) begin q
2023.03.15 -
verilog7
조합회로 설계 실습 module mux4x1_error ( input [1:0] sel, input d0, d1, d2, d3, output m1, output reg m2 ); assign m1 = sel[1] ? (sel[0] ? d3 : d2) : (sel[0] ? d1 : d0); always @(*) begin if (sel == 2'b11) m2 = d3; else if (sel == 2'b10) m2 = d2; else if (sel == 2'b01) m2 = d1; else if (sel == 2'b00) m2 = d0; end endmodule 이렇게 구현하면 Latch가 발생하게 된다. 하지만 합성 과정에서 Latch가 없어진것을 볼 수 있다. 이러면 시뮬레이션과 실제 보드에서 동작이 ..
2023.03.14 -
verilog 5
Task와 Function 반복되는 행위수준 모델링을 task와 함수라 정의하고, 이들을 호출해서 사용한다. Task와 fucntion은 소스코드의 가독성과 디버깅을 쉽게 한다. function은 하나의 값을 반환하는 c언어의 정수, 실수형 함수들과 유사하고, task는 void와 유사하다. 둘의 공통점은 모듈 내에서 선언되어야 하고, 선언된 모듈내에서만 호출 가능하다. 또 둘 다 내부에서 wire(net 자료형)은 가질 수 없고, wire를 사용할 수 없기 때문에 continuous assignment문을 사용할 수 없다. function [size_or_type]에는 함수 결과값의 속성 및 범위를 지정하며, 별도의 지정이 없으면 1비트 reg형으로 선언된다. 함수가 정의되면 함수 이름과 동일한 이름의..
2023.03.13