HDL: Verilog(2001)
Synthesis: Intel(Altera)_Quartus prime 18.1
Simulation: Intel(Altera)_ModelSim 10.5b
Board: Intel(Altera)_DE1_SoC (FPGA와 HPS가 결합된 SoC)
FPGA(device): Intel(Altera)_Cyclone V(5CSEMA5F31c6)
HPS(Hard Processor System): ARM_Coretex-A9
8x8mult을 만들기 위한 module 구현 중.
uart / mult 8*8에 사용할 reg16를 만들기 위한 연습과정
reg16
여기서 가장 핵심 부분은 bit저장하는 부분도 중요하지만 bit가 clear되는 부분도 중요하다.
reg16.v
clk을 사용하기 때문에 always를 사용했음
clk이 상승엣지일 때 모든 변수가 동작되도록 설계,
clk_ena가 1일때, sclr_n이 0이면 > reg_out은 clear 즉 0이 되도록 설계,
sclr_n이 1이면 output, reg_ou은 input data인 datain값을 받도록 설계했다.
datain[15:0]이 아닌 datain만 사용해도 동일하게 출력 됨
tb_ reg16.v
clk이 지속적으로 동작되도록 initial begin-end 구문을 통해
초기값 설정 후, forever begin-end를 통해 #20ns 마다 0,1 반복되도록 설계
그 밖의 input 변수 값 설정 후
변수들을 관찰하기 위해 #40마다 data 값을 변경했다.
do.file
0,1 반복인 clk은 binary,
16진수 값을 제대로 확인하기위해
datain, output값을 hex로 설정
Simulation
시뮬레이션 결과 waveform이다.
initial begn-end로 넣어준 입력값들이 설계된 code에 알맞게 동작됨을 확인했다.
40ns에서 clk_ena들어옴 > clk이 1이됐을 때 비교 > 비교 후 60ns에서 clear되는것을 확인
#40 이후 sclr_n값 1입력받음 > clk이1이될 때 까지 대기하다 비교 > 100ns에서 clk, sclr_n이 1이기 때문에 datain 값을 받음 output data 1f1f로 입력됐음
#40 이후 120ns에서 clk_ena data가 0, datain이 1234로 입력 > (clk_ena가 0이기 때문에 출력값 변동 x)
#40 이후 160ns에서 clk_ena data 1로 입력 > clk1이 될때 출력값인 reg_out에 변경된datain 값인 1234이 출력되는 것을 확인
#40 이후 200ns에서 sclr_n data를 0으로 입력함 > 설계된 if문에 따라 비교하여 출력값 clear됨.
verilog - mult_control(Mealy와 Moore 결합 방식의 FSM) (1) | 2024.05.15 |
---|---|
verilog - counter(!중요 asynchronous clear) (0) | 2024.05.12 |
verilog - 7segment (0) | 2024.05.07 |
verilog - shifter(중요!) (0) | 2024.05.06 |
verilog-mux4 (0) | 2024.05.06 |