d600上电时序

DELL D600 上电时序 上

1)      U68提供5VALW待机电压给 SMSC I/O 47N254AAQ,同时也经过一个电阻提供给开关;

U94待机管输出3VALW待机电压给SMSC I/O,同时还提供给BIOS,BIOS通过一个双箭头与SMSC I/O互相交换信息;

19.5V经过保护隔离后,公共点给MAX163222PIN,V+提供电压;

2)      开关, 按下开关就触发,就能把U68提供给开关的5VALW待机电压经过一个反向二极管后提供给SMSC I/O;

3)      SMSC I/O 一路输出 SUS ON 信号(3.3V高电平) U73或门后给MAX163223PIN,二路输出SUS ON信号经一个电阻后给MAX16327PIN; MAX163221PIN输出线性5VMAX163228PIN;

4)      MAX1632输出3VSUS,5VSUS两个系统供电;5VSUS提供给SC1486(PU3),5VSUS提供给SC1486(PU4),5VSUS提供给Q77,3VSUS提供给Q69;

5)      SC1486(PU3)输出2.5VSUS,给北桥;

SC1486(PU4)输了1.5VSUS给南桥;

1.5VSUSQ81提供电压;

6) SMSC I/O给南桥输入一个PWBTN#信号;

7) 南桥给SMSC I/O返回S1,S3,S5,三个信号;


###################################################################


DELL D600 上电时序 下

8) SMSC I/O 输出RUN ON信号(3.3V高电平)U77, Q83, 经一个电阻后给SC1486;

9) Q83接收到RUN ON 信号后就传输给Q84,Q84再分三路分别传输给Q77,Q69,Q81,Q775VSUS转换为5VRUN输出, Q693VSUS转换成3VRUN输出,Q811.5VSUS转换成1.5VRUN输出;   SMSC I/O输出的RUN ON信号经电阻后给SC1468,SC1486就将5VSUS转换成1.8VRUN信号输出;

10) Q77输出5VRUN后经过一个正向二极管,再传输给SC1486(PU3),SC1486就会将5VSUS转换成1.25VRUN输出给内存;

11) SC1486输出一个PG信号(3.3V高电平)U77与门;

12) U77与门将SMSC I/O给它的RUNON信号给MAX171510PIN11PIN,MAX1715就会输出1.2V的电压给北桥,还会输出1.05VCPU参考电压;U77还会将接收到的RUN ON信号给SC147635PIN,SC1476就会输出CPU核心供电;

13) SC1476输出VRPG信号; VRPG信号为电源好信号,这个电源好信号会送去时钟IC,用于开启时钟,还会送去南桥,产生两路时钟控制信号控制时钟IC打开时钟;

14) SMSC I/O 输出PMOK信号给南桥,PMOK也是一个电源好信号,南桥就会产生复位信号给主板各设备提供复位,北桥复位CPU,整个上电时序结束;

module st7789_init ( input clk, // 5MHz时钟 input rst_n, // 异步复位(低有效) input locked, // PLL锁定信号 input sda_end, // SPI传输完成(高有效) input spi_busy, // SPI忙(高有效) output reg sda_start, // 启动SPI传输(高脉冲) output reg [8:0] data_out,// 9位数据(bit8:命令/数据标志) output reg initial_end, // 初始化完成(高有效) output reg [6:0] cnt_index// 步骤计数器(用于观察) ); // 内部变量 reg [8:0] current_row; // 当前红色滚动行(0~319) reg [17:0] frame_cnt; // 帧计数器 reg [17:0] gram_cnt; // GRAM填充计数器 reg [8:0] pixel_row; // 当前像素行(时序逻辑计算) reg [8:0] data_out_cmd; // 命令阶段数据缓冲 reg [8:0] data_out_gram; // GRAM阶段数据缓冲 // 状态定义 localparam IDLE = 2&#39;b00; localparam SEND = 2&#39;b01; localparam WAIT_END = 2&#39;b10; localparam DELAY = 2&#39;b11; // 参数定义 localparam GRAM_TOTAL = 18&#39;d153_600; // 240×320×2字节 localparam RESET_DELAY = 24&#39;d600_000; // 复位延迟(120ms@5MHz) localparam CMD_DELAY = 24&#39;d50_000; // 命令间延迟(10ms) reg [1:0] state; reg [23:0] delay_cnt; // 延迟计数器 // 1. 命令阶段数据缓冲(纯组合逻辑,无时序变量) always @(*) begin case (cnt_index) 0 : data_out_cmd = 9&#39;h001; // 软件复位 1 : data_out_cmd = 9&#39;h011; // 退出睡眠 2 : data_out_cmd = 9&#39;h036; // 内存访问控制 3 : data_out_cmd = {1&#39;b1, 8&#39;h00}; // 方向配置 4 : data_out_cmd = 9&#39;h03A; // 像素格式 5 : data_out_cmd = 9&#39;h105; // RGB565 6 : data_out_cmd = 9&#39;h029; // 开启显示 7 : data_out_cmd = 9&#39;h02A; // CASET 8 : data_out_cmd = 9&#39;h100; // X起始高字节 9 : data_out_cmd = 9&#39;h100; // X起始低字节 10 : data_out_cmd = 9&#39;h100; // X结束高字节 11 : data_out_cmd = 9&#39;h1EF; // X结束低字节 12 : data_out_cmd = 9&#39;h02B; // RASET 13 : data_out_cmd = 9&#39;h100; // Y起始高字节 14 : data_out_cmd = 9&#39;h100; // Y起始低字节 15 : data_out_cmd = 9&#39;h101; // Y结束高字节 16 : data_out_cmd = 9&#39;h13F; // Y结束低字节 17 : data_out_cmd = 9&#39;h02C; // RAMWR default: data_out_cmd = 9&#39;h000; endcase end // 2. GRAM阶段数据计算(时序逻辑,使用寄存器保存结果) always @(posedge clk or negedge rst_n) begin if (!rst_n) begin pixel_row <= 9&#39;d0; data_out_gram <= 9&#39;d0; end else begin // 计算当前像素行(每行240像素×2字节=480字节) pixel_row <= gram_cnt / 18&#39;d480; // 生成像素数据(红色/黑色) if (pixel_row <= current_row) begin data_out_gram <= (gram_cnt[0]) ? 9&#39;h100 : 9&#39;h1F8; // 红色(0xF800) end else begin data_out_gram <= 9&#39;h100; // 黑色(0x0000) end end end // 3. 主状态机(整合数据选择) always @(posedge clk or negedge rst_n) begin if (!rst_n) begin state <= IDLE; sda_start <= 1&#39;b0; initial_end <= 1&#39;b0; cnt_index <= 7&#39;d0; delay_cnt <= 24&#39;d0; gram_cnt <= 18&#39;d0; current_row <= 9&#39;d0; frame_cnt <= 18&#39;d0; data_out <= 9&#39;d0; end else if (!locked) begin state <= IDLE; cnt_index <= 7&#39;d0; initial_end <= 1&#39;b0; end else begin case (state) IDLE: begin sda_start <= 1&#39;b0; if (initial_end) begin state <= IDLE; end else if (cnt_index <= 7&#39;d17) begin // 命令阶段:选择命令数据 data_out <= data_out_cmd; // 设置延迟 delay_cnt <= (cnt_index == 0 || cnt_index == 1) ? RESET_DELAY : CMD_DELAY; state <= DELAY; end else begin // GRAM阶段:预加载第一组数据 data_out <= data_out_gram; state <= SEND; end end DELAY: begin if (delay_cnt > 0) begin delay_cnt <= delay_cnt - 1; end else begin state <= SEND; end end SEND: begin sda_start <= 1&#39;b1; state <= WAIT_END; end WAIT_END: begin if (sda_end && !spi_busy) begin if (cnt_index <= 7&#39;d17) begin // 命令序列处理 if (cnt_index == 7&#39;d17) initial_end <= 1&#39;b1; cnt_index <= cnt_index + 1; state <= IDLE; end else begin // GRAM填充处理 frame_cnt <= frame_cnt + 1; // 帧结束时更新滚动行 if (frame_cnt == GRAM_TOTAL - 1) begin frame_cnt <= 0; current_row <= (current_row < 9&#39;d319) ? current_row + 1 : 0; end // 更新GRAM计数器并预加载下一组数据 gram_cnt <= (gram_cnt < GRAM_TOTAL - 1) ? gram_cnt + 1 : 0; data_out <= data_out_gram; // 预加载下一个数据 state <= SEND; end end end endcase end end endmodule
最新发布
10-08
module vga_ctrl( input vga_clk, //vga驱动时钟:40KHz input rst_n, //复位信号:低电平有效 input [23:0] rd_data, //存储在双口RAM中的图片数据 output reg [17:0] rd_addr, //双口RAM读地址 output vga_black, output vga_sync, output vga_hs, output vga_vs, output vga_clk1, output reg [23:0] vga_rgb ); /***************************** 800*600*60显示模式:· 行:628(a:4 b:23 c:600 d:1) 列:1056(a:128 b:88 c:800 d:40) ******************************/ assign vga_black = 1&#39;b1; assign vga_sync = 1&#39;b0; reg [10:0] cnt1; //列计数器1056 reg [10:0] cnt2; //行计数器628 assign vga_clk1=vga_clk; //列计数 always @ (posedge vga_clk, negedge rst_n) begin if(rst_n == 1&#39;b0) cnt1 <= 11&#39;d0; else if(cnt1 < 11&#39;d1055) cnt1 <= cnt1+1&#39;d1; else cnt1 <= 11&#39;d0; end //行计数 always @ (posedge vga_clk, negedge rst_n) begin if(rst_n == 1&#39;b0) cnt2 <= 11&#39;d0; else if(cnt2 == 11&#39;d628 && cnt1 == 11&#39;d1055)//最后一行最后一列 cnt2 <= 11&#39;d0; //行计数器清零 else if(cnt1 == 11&#39;d1055) //有效显示行且最后一列 cnt2 <= cnt2 + 1&#39;d1; //行加一 else //不在最后一行 cnt2 <= cnt2; //行不变 end //行同步时序 assign vga_hs = (cnt1 < 128) ? 1&#39;b0 : 1&#39;b1; //列同步时序 assign vga_vs = (cnt2 < 4) ? 1&#39;b0 : 1&#39;b1; //圈中图片显示区域(200*180):且显示在区域中心位置 reg valid; //显示区域标志信号 always @ (*) begin if(rst_n == 1&#39;b0) valid = 1&#39;b0; else if((cnt1 >= 11&#39;d391 && cnt1 < 11&#39;d841) && (cnt2 >= 11&#39;d177 && cnt2 <11&#39;d477)) valid = 1&#39;b1; else valid = 1&#39;b0; end //控制读地址在图片显示区域变化 always @ (posedge vga_clk, negedge rst_n) begin if(rst_n == 1&#39;b0) begin rd_addr <= 18&#39;d0; vga_rgb <= 24&#39;h0; end else if(valid == 1&#39;b1) //在图片显示区域 begin if(rd_addr < 18&#39;d134999) begin //读地址在有效区间 rd_addr <= rd_addr +1&#39;d1; //对应地址上的数据全给RGB vga_rgb <= rd_data; end else begin //不在地址区间内 rd_addr <= 18&#39;d0; //地址清零 vga_rgb <= 24&#39;h0; //不显示数据 end end else //不在图片显示区域内 vga_rgb <= 24&#39;h0; //不显示数据 end endmodule
06-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值