📄 syv.v
字号:
`define b begin
`define e end
////////////////////////////////////////////////////////////////////////////////
// Company: 中北大学
// Engineer: 石岩
//
// Create Date: 15:54:03 05/18/08
// Design Name:
// Module Name: syv
// Project Name:
// Target Device:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////
module syv(
global_clk, div_clock,
//--------------------interface with usb mcu--------
data_in, datam25_in, s_m25, datam25_fpga, hold_m25 , w_m25,
// --------------------interface usb------------------
usbtxe,rd_usb,wr_usb,data_ft,
// --------------------interface sdram------------------
memaddr,data_mem ,wr_mem,rd_mem,
// --------------------lamp test------------------
led_chip1, led2,led_rd4
);
//输入输出引脚定义///////////////////////////////////////////////////////////////////////////////
input global_clk;
output div_clock;
output [18:0]memaddr;
output wr_mem;
output rd_mem;
inout [7:0]data_mem ;
input [7:0]data_in;
input datam25_fpga;
output datam25_in;
output s_m25;
output w_m25;
output hold_m25;
output led_chip1;
output led2;
output led_rd4;
output rd_usb ;
output usbtxe ;
output wr_usb ;
output [7:0]data_ft ;
//输出引脚映射变量///////////////////////////////////////////////////////////////////////////////////////
reg datam25_in = 0;
reg div_clock = 0;
reg s_m25;
reg led_chip1= 1;
reg led2_3= 1;
reg led_rd4 = 1;
// reg [7:0]data_mem ;
reg rd_mem= 1;
reg wr_mem= 0;
reg [18:0]memaddr= 0;
reg wr_usb;
assign hold_m25 = 1;
assign w_m25 = 1;
assign rd_usb = 1;
reg usbtxe;
reg [7:0]da_tp3= 0;
reg ce=1;
assign data_mem= ce?da_tp3:8'bzzzzzzzz;
reg [7:0]data_ft;
//内部全局变量///////////////////////////////////////////////////////////////////////////////////
reg [7:0]da_tp1 = 0;
reg [7:0]da_tp2 = 0;
reg [7:0]da_tp4= 0;
reg [9:0]counter_6M = 0;
reg [23:0]resetcount= 0;
reg [4:0]i = 0;
reg [4:0]j = 0;
reg [4:0]f = 0;
reg [8:0]k = 0;
reg sys_reset = 0;
reg [5:0]st_wr = 0;
reg [23:0]w_addr24 = 0;
reg div_clock_t = 0;
reg [14:0]count_era = 0;
reg [5:0]count_pp = 0;
reg [5:0]count_rd = 0;
reg usbtxein = 1;
reg txeflag;
reg [1:0] count;
//复位信号的产生*********************************************************************************
always @ (posedge global_clk) //6M晶振
`b
if ((resetcount <= 24'h00ffff)) //6M晶振全复位期间 约157us
`b
resetcount <= resetcount + 1 ;
// data_temp <=data_in;
sys_reset <= 1 ;
`e
else
`b
resetcount <= resetcount ;
// data_temp<=data_in;
sys_reset <= 0 ;
`e
`e
//计数循环控制*********************************************************************************
always @ (posedge global_clk)
`b
if(sys_reset)
`b
counter_6M <= 0;
div_clock <= 0;
`e
else
`b
if (counter_6M == 312)
`b
counter_6M <= 0;
div_clock <= ~div_clock;
// led2 <= ~led2 ;
div_clock_t<= ~div_clock_t;
`e
else
`b
counter_6M <= counter_6M + 1;
`e
`e
`e
//******************* txe xiaodou ***********
always @ (posedge div_clock_t)
`b
if (sys_reset)
`b
usbtxein<= 1; //init is ineffect
txeflag<= 1;
count[1:0]<= 0;
`e
else
`b
if ((usbtxe == 0) && (count[1] == 0) && (txeflag == 1))
`b
txeflag <= 1;
usbtxein <= 1;
count <= count+1;
`e
else if((usbtxe == 0) && (count[1] == 1) && (txeflag == 1))
`b
usbtxein <= 0;
count <= 0;
txeflag<= 0;
`e
else if ((usbtxe == 1) && (count[1] == 0) && (txeflag == 0))
`b
usbtxein <= 0;
count <= count+1;
txeflag <= 0;
`e
else if ((usbtxe == 1) && (count[1] == 1) && (txeflag == 0))
`b
usbtxein <= 1;
count <= 0;
txeflag <= 1;
`e
else
`b
count <= 0;
`e
`e
`e
//******************* zhu ***********
always @ (posedge div_clock_t ) //
`b
if(sys_reset)
`b
datam25_in<= 0 ;
st_wr <= 0 ;
s_m25 <= 1;
led_chip1 <= 1;
// led2 <= 0;
w_addr24<= 0 ;
da_tp1[7:0]<=0 ;
`e
else
`b
if (st_wr == 0)
`b
s_m25 <= 0; //片选信号拉低
led_chip1 <= 0; //led_chip1====s_m25
st_wr <= 1;
da_tp1<=data_in;
`e
else if (st_wr == 1) //开始发送写使能指令06H
`b
datam25_in <= 0; // 0
st_wr <= 2;
`e
else if (st_wr == 2)
`b
datam25_in <= 0; // 0
st_wr <= 3;
`e
else if (st_wr == 3)
`b
datam25_in <= 0; // 0
st_wr <= 4;
`e
else if (st_wr == 4)
`b
datam25_in <= 0; // 0
st_wr <= 5;
`e
else if (st_wr == 5)
`b
datam25_in <= 0; // 0
st_wr <= 6;
`e
else if (st_wr == 6)
`b
datam25_in <= 1; // 4
st_wr <= 7;
`e
else if (st_wr == 7)
`b
datam25_in <= 0; // 2
st_wr <= 8;
`e
else if (st_wr == 8)
`b
datam25_in <= 0; // 0
st_wr <= 9 ;
`e
else if (st_wr == 9)
`b
s_m25 <= 1; //片选信号拉高
led_chip1 <= 1; //led_chip1====s_m25
st_wr <= 10;
`e
else if (st_wr == 10)
st_wr <= 11 ;
else if (st_wr == 11)
st_wr <= 12 ;
else if (st_wr == 12)
st_wr<= 13 ;
else if (st_wr == 13)
st_wr <= 14 ;
//------------------- 开始擦除M25P80 发送C7H ------------
else if (st_wr == 14)
`b
datam25_in <= 1;
st_wr<= 15;
`e
else if (st_wr == 15)
`b
datam25_in <= 1;
st_wr <= 16;
`e
else if (st_wr == 16)
`b
datam25_in<= 0;
st_wr <= 17;
`e
else if (st_wr == 17)
`b
datam25_in<= 0;
st_wr <= 18;
`e
else if (st_wr == 18)
`b
datam25_in<= 0;
st_wr <= 19;
`e
else if (st_wr == 19)
`b
datam25_in <= 1;
st_wr <= 20;
`e
else if (st_wr == 20)
`b
datam25_in <= 1;
st_wr <= 21;
`e
else if (st_wr == 21)
`b
datam25_in <= 1;
st_wr <= 22;
`e
else if (st_wr == 22)
`b
s_m25 <= 1; //片选信号拉高
led_chip1 <= 1;
st_wr <= 23;
`e
else if (st_wr == 23)
`b
count_era <= count_era+1; //计数
st_wr <= 24;
`e
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -