소개
게시글
질문&답변
2021.08.03
simple_bram_ctrl.v에 true_dpbram.v를 instantiation 을 어떻게 해야 할까요?
제공해 주신 simple_bram_ctrl.v 마지막에 true_dpbram.v 를 instantiation 한 코드만 아래와 같이추가한 단순한 코드입니다. 전체 코드도 첨부 하였습니다. true_dpbram #( .DWIDTH (DWIDTH), .AWIDTH (AWIDTH), .MEM_SIZE (MEM_SIZE)) u_TDPBRAM( .clk (clk), .addr0 (addr0), .ce0 (ce0), .we0 (we0), .q0 (q0), .d0 (d0), // no use port B. .addr1 (0), .ce1 (0), .we1 (0), .q1 (), .d1 (0) ); ////////////////////////////////////////////////////////////////////////////////// // Company: Personal // Engineer: Matbi / Austin // // Create Date: 2021.01.31 // Design Name: // Module Name: simple_bram_ctrl // Project Name: // Target Devices: // Tool Versions: // Description: To study ctrl sram. (WRITE / READ) // FSM + mem I/F // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// `timescale 1ns / 1ps module simple_bram_ctrl // Param #( parameter DWIDTH = 16, parameter AWIDTH = 7, parameter MEM_SIZE = 128 ) ( input clk, input reset_n, input i_run, input [AWIDTH-1:0] i_num_cnt, output o_idle, output o_write, output o_read, output o_done, // Memory I/F output[AWIDTH-1:0] addr0, output ce0, output we0, input [DWIDTH-1:0] q0, output[DWIDTH-1:0] d0, // output read value from BRAM output o_valid, output[DWIDTH-1:0] o_mem_data ); /////// Local Param. to define state //////// localparam S_IDLE = 2'b00; localparam S_WRITE = 2'b01; localparam S_READ = 2'b10; localparam S_DONE = 2'b11; /////// Type //////// reg [1:0] c_state; // Current state (F/F) reg [1:0] n_state; // Next state (Variable in Combinational Logic) wire is_write_done; wire is_read_done; /////// Main //////// // Step 1. always block to update state always @(posedge clk or negedge reset_n) begin if(!reset_n) begin c_state
- 1
- 2
- 605
질문&답변
2021.07.23
Latch 방지를 위한 n_state 의 default 값 정의
fsm_test.v 파일에서 52번째 always block 하고 66번째 always block 하고 합쳐서 한 블럭 안에 기술 할 수 있는가에 대한 질문 이었습니다. 아래와 같이 두 always 블록을 합해서 vivado에서 implantation 해보고 schemetic 확인 해 보니 합하기 전이랑 똑 같네요. 근데 이렇게 하면 S-DONE 의 두개의 조건이 나란히 실행되는데 blocking assignmet 로 되었어서 o_done에 1 이 대입되고 n_state가 s_IDLE 로 변하는데 순서 대로 변화 하는지 아님 clk이 없으니 동시에 변화하는지 궁금합니다. 보니까 클럭 없는 always block 은 항상 "=" 만 쓰이는 거 같아서요.. ============================== always @(*) begin n_state = S_IDLE; // To prevent Latch. o_done = 0; // To prevent Latch. case(c_state) S_IDLE: if(i_run) n_state = S_RUN; S_RUN : if(is_done) n_state = S_DONE; S_DONE: o_done = 1; S_DONE: n_state = S_IDLE; endcase ================================== 틀려서 좋다고 하셔서 이렇게 해도 되지 않을까 하고 용기를 가지고 질문해 봅니다.^^ 너무 주저리 주저리 한것 같네요^^
- 2
- 3
- 918
질문&답변
2021.07.23
r_valid 신호의 역활
답변 감사합니다.. 아직은 이해가 좀 갈듯 말듯 하네요..공부를 더 많이 해야 되겠네요 ^^
- 2
- 5
- 679
질문&답변
2021.07.23
C 코드 for 구문 질문
죄송합니다. 이곳 저곳 찾아봐도 명쾌한 설명이 없어서 답답한 마음에 여기에 여쯥게 되어씁니다. 설명 듣고 자세히 들여다 보니 이제서야 이해가 되네요.. 답변 감사합니다^^
- 1
- 2
- 162