728x90
0. [verilog] - SIPO Register 4-bit |
d filp-flop을 활용하여 직렬입력/병렬출력 레지스터(SIPO Register)를 구현하였다.
1. 풀이 |
clk신호마다 한비트씩 데이터를 이동해주었다. 입력은 data_in으로 받아 q[3]에 저장해주었다.
입력은 한쪽에서만 들어오는 방식이다.
2. 소스코드 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | module sipo4(clk,reset,data_in,q); input clk, reset, data_in; output reg [3:0] q; always @ (negedge reset or posedge clk) begin if(~reset) q <= 4'b0000; else begin q[2:0] <= q[3:1]; q[3] <= data_in; end end endmodule | cs |
- Testbench
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | `timescale 1ns / 1ps //////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 00:07:56 12/16/2020 // Design Name: sipo04 // Module Name: D:/Xilinx/notebook/zip/Lab_06/sipo04/tb.v // Project Name: sipo04 // Target Device: // Tool versions: // Description: // // Verilog Test Fixture created by ISE for module: sipo04 // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // //////////////////////////////////////////////////////////////////////////////// module tb; // Inputs reg clk; reg resetn; reg data_in; // Outputs wire [3:0] q; // Instantiate the Unit Under Test (UUT) sipo04 uut ( .clk(clk), .resetn(resetn), .data_in(data_in), .q(q) ); initial begin // Initialize Inputs clk = 0; resetn = 1; data_in = 0; // Wait 100 ns for global reset to finish #100; end always begin #1 clk = ~clk; end always begin #2 data_in = ~data_in; end endmodule | cs |
3. 참고 |
질문이나 지적 있으시면 댓글로 남겨주세요~
도움 되셨으면 하트 꾹!
'---------개인공부-------- > |verilog|' 카테고리의 다른 글
[verilog] counter(up, down, load, reset 구현) (0) | 2019.11.03 |
---|---|
[verilog] decoder 3 to 8 (2) | 2019.10.12 |
[verilog] 8-bit counter (1) | 2019.10.12 |
[verilog] 1/10 분주기(prescaler) (0) | 2019.10.12 |
[verilog] 4-bit full adder(4비트 전가산기) (0) | 2019.09.28 |