본문 바로가기

Shifter * Logical shift Left(LSL) Register를 Shamt만큼 Shift Left시키고 빈 공간을 0으로 채운다 module LSL8(d_in,shamt,d_out); input [7:0] d_in; input [1:0] shamt; output [7:0] d_out; mx4 U0_mx4(.y(d_out[7]),.d0(d_in[7]),.d1(d_in[6]),.d2(d_in[5]),.d3(d_in[4]),.s(shamt)); mx4 U1_mx4(.y(d_out[6]),.d0(d_in[6]),.d1(d_in[5]),.d2(d_in[4]),.d3(d_in[3]),.s(shamt)); mx4 U2_mx4(.y(d_out[5]),.d0(d_in[5]),.d1(d_in[4]),.d2(d_in[3]).. 더보기
동적 할당 정적 할당은 고정된 크기로 프로그램이 실행이 끝날 때 까지 기억장소를 할당받는다. 그리고 프로그램 실행이 끝나면 할당된 기억장소가 해제된다. 정적 할당의 문제점을 보면 만약 배열 100칸을 할당했다치면 100개를 초과하는 데이터가 들어올경우 전부 받을 수 없고 또한 100개 미만의 데이터가 왔을 시에 기억공간 낭비가 생긴다. 이 문제점을 해결하기 위한것이 동적 할당이다. 즉 프로그램을 실행하면서 배열의 크기를 결정하고 그 크기만큼의 기억공간을 할당받는 것이다. 코드 영역 데이터 영역 힙 영역 스택 영역 주기억장치의 4가지 영역 중 힙 영역이 동적으로 할당할 기억 장소 동적할당 C 자료형* 포인터 변수명; 포인터 변수명 = (자료형*)malloc(자료형 크기); C++ 자료형* 포인터 변수명; 포인터 변수.. 더보기
Counter * 5진 Counter 5개의 state를 가지고 inc가 1이 들어올 경우 1증가 inc가 0이 들어올 경우 1감소 module cnt5(cnt,clk,reset_n,inc); input clk,reset_n,inc; output [2:0] cnt; reg [2:0] cnt; reg [2:0] next_cnt; parameter zero= 3'b000; parameter one = 3'b001; parameter two = 3'b010; parameter three=3'b011; parameter four = 3'b100; always @(posedge clk or negedge reset_n) begin if(reset_n==1'b0) cnt 더보기