⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmd_generator.v

📁 是一个用于soc的32bit risc核
💻 V
字号:
/********************************************************* MODULE:		Sub Level SDRAM Command Genrator FILE NAME:	cmd_generator.v VERSION:	1.0 DATE:		April 28th, 2002 AUTHOR:		Hossein Amidi COMPANY:	 CODE TYPE:	Register Transfer Level DESCRIPTION:	This module is the sub level RTL code of SDRAM Controller ASIC verilog code. It will generate the SDRAM control signals. Hossein Amidi (C) April 2002*********************************************************/// DEFINES`timescale 1ns / 10psmodule cmd_generator(// Input							reset,							clk0,							do_reada,							do_writea,							do_preacharge,							do_rw,							rowaddr,							coladdr,							bankaddr,							page_mod,							do_load_mod,							do_refresh,							caddr,							do_nop,							rw_flag,							oe4,							// Output							sadd,							ba,							cs,							ras,							cas,							we,							cke							);// Parameter`include        "parameter.v"// Inputinput reset;input clk0;input do_reada;input do_writea;input do_preacharge;input do_rw;input [row_size - 1:0]        rowaddr;input [col_size - 1:0]        coladdr;input [bank_size - 1:0]       bankaddr;input page_mod;input do_load_mod;input do_refresh;input [padd_size - 1 : 0]caddr;input do_nop;input rw_flag;input oe4;// Outputoutput [add_size - 1 : 0]sadd;output [ba_size - 1 : 0]ba;output [cs_size - 1 : 0]cs;output ras;output cas;output we;output cke;// Internal wire and reg signalswire reset;wire clk0;wire do_reada;wire do_writea;wire do_preacharge;wire do_rw;wire [row_size - 1:0]        rowaddr;wire [col_size - 1:0]        coladdr;wire [bank_size - 1:0]       bankaddr;wire page_mod;wire do_load_mod;wire do_refresh;wire [padd_size - 1 : 0]caddr;wire do_nop;wire rw_flag;wire oe4;reg [add_size - 1 : 0]sadd;reg [ba_size - 1 : 0]ba;reg [cs_size - 1 : 0]cs;reg ras;reg cas;reg we;reg cke;// Assignment// This always block generates the address, cs, cke, and command signals(ras,cas,wen)// always @(posedge reset or posedge clk0)begin        if (reset == 1'b1) begin                sadd <= 0;                ba   <= 0;                cs   <= 1;                ras  <= 1;                cas  <= 1;                we   <= 1;                cke  <= 0;        end        else begin                cke  <= 1;// Generate sadd 	                if (do_writea == 1 | do_reada == 1)    // ACTIVATE command is being issued, so present the row address                        sadd <= rowaddr;                else if ((do_rw == 1) | (do_preacharge == 1))                        sadd[10] <= !page_mod;              // set sadd[10] for autopreacharge read/write or for a preacharge all command                else                                        // don't set it if the controller is in page mode.                                   sadd <= coladdr;                 // else alway present column address                if (do_preacharge == 1 | do_load_mod == 1)                        ba <= 0;                       // Set ba=0 if performing a preacharge or load_mod command                else                        ba <= bankaddr[1:0];           // else set it with the appropriate address bits		                if (do_refresh == 1 | do_preacharge == 1 | do_load_mod == 1)                        cs <= 0;                                    // Select both chip selects if performing                else                                                  // refresh, preacharge(all) or load_mod                begin                        cs[0] <= caddr[padd_size - 1];                   // else set the chip selects based off of the                        cs[1] <= ~caddr[padd_size - 1];                  // msb address bit                end//Generate the appropriate logic levels on ras, cas, and we//depending on the issued command.//		                if (do_nop == 1) begin			                      	// No Operation: RAS=1, CAS=1, WE=1                        ras <= 1;                        cas <= 1;                        we  <= 1;                end	             else if (do_refresh == 1) begin                        // refresh: S=00, RAS=0, CAS=0, WE=1                        ras <= 0;                        cas <= 0;                        we  <= 1;                end                else if ((do_preacharge == 1) & ((oe4 == 1) | (rw_flag == 1))) begin      // burst terminate if write is active                        ras <= 1;                        cas <= 1;                        we  <= 0;                end                else if (do_preacharge == 1) begin                 // preacharge All: S=00, RAS=0, CAS=1, WE=0                        ras <= 0;                        cas <= 1;                        we  <= 0;                end                else if (do_load_mod == 1) begin                 // Mode Write: S=00, RAS=0, CAS=0, WE=0                        ras <= 0;                        cas <= 0;                        we  <= 0;                end                else if (do_reada == 1 | do_writea == 1) begin  // Activate: S=01 or 10, RAS=0, CAS=1, WE=1                        ras <= 0;                        cas <= 1;                        we  <= 1;                end                else if (do_rw == 1) begin                      // Read/Write: S=01 or 10, RAS=1, CAS=0, WE=0 or 1                        ras <= 1;                        cas <= 0;                        we  <= rw_flag;                end                else begin                                      // No Operation: RAS=1, CAS=1, WE=1                        ras <= 1;                        cas <= 1;                        we  <= 1;                end        end endendmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -