一、PLL控制器
pll_controller.v 是一个PLL动态重配置控制器,用于根据不同的视频模式(mode)动态配置Altera PLL IP的时钟频率参数。PLL动态重配置控制器的RTL视图:

该模块的信号接口说明如下表格:
| 信号名称 | 信号说明 |
| clk | 系统时钟(50MHz) |
| reset_n | 异步复位,低电平有效 |
| mode[3:0] | 视频模式输入 |
| mode_change | 模式变化指示信号(来自vpg_mode模块) |
| mgmt_readdata[31:0] | 从ALTPLL_RECONFIG IP读取的数据 |
| mgmt_read | ALTPLL_RECONFIG IP读使能 |
| mgmt_write | ALTPLL_RECONFIG IP写使能 |
| mgmt_address[5:0] | ALTPLL_RECONFIG IP寄存器地址 |
| mgmt_writedata[31:0] | 写入ALTPLL_RECONFIG IP的数据 |
PLL控制器里面设置了一个9个状态的状态机,它是一个典型的顺序状态机,用于控制Altera PLL IP的读写流程:

每个状态要完成的任务如下:
| 状态 | 描述 |
| 0000 | 检测mode_change上升沿时设置轮询模式且转入状态1 |
| 0001 | 设置M计数器且转入状态2 |
| 0010 | 设置N计数器且转入状态3 |
| 0011 | 设置C计数器且转入状态4 |
| 0100 | 设置带宽且转入状态5 |
| 0101 | 设置电荷泵转入状态6 |
| 0110 | 设置启动重配置且转入状态7 |
| 0111 | 检查状态且转入状态8 |
| 1000 | 等待重配置完成(bit 0=1)则转入状态0 |
下面是该控制模块的时序图:

这个时序是符合ALTPLL_RECONFIG IP的polling模式的时序的(参考Implementing Fractional PLL Reconfiguration with Altera PLL and Altera PLL Reconfig IP Cores 文档Figure 2)。从时序图可以看到:
在空闲状态(状态0)下,当检测到模式改变信号时,设置轮询模式,准备进入状态1;
进入状态1设置M计数器,写入polling mode寄存器,准备进入状态2;
进入状态2设置N计数器,写入M计数器值,准备进入状态3;
进入状态3设置C计数器,写入N计数器值,准备进入状态4;
进入状态4设置带宽,写入C计数器值,准备进入状态5;
进入状态5设置电荷泵,写入带宽参数,准备进入状态6;
进入状态6设置启动重配置,写入电荷泵参数,准备进入状态7;
进入状态7,设置检查状态(即读状态寄存器)写入重配置启动命令,准备进入状态8;
进入状态8,读取状态寄存器,当bit0为1时代表重配置完成,准备返回状态0。
另外,该控制器其中7个状态里面都使用了write_count计数器来控制写操作的持续时间,总共是3个周期:
第0个时钟周期:设置拉高mgmt_write
第1个时钟周期:mgmt_write保持高(用于总线传输)
第2个时钟周期:mgmt_write拉低,准备切换到下一个状态

二、分辨率切换模块
vpg_mode.v是模式切换模块,用于在多个预定义的VGA分辨率模式之间循环切换。该模块包含的头文件vpg.h预定义了这些模式:
| Mode | 分辨率 | 视频标准 | 像素时钟 |
| 0 | 640x480p60 | VGA | 25.175MHz |
| 1 | 720x480p60 | 480P | 27MHz |
| 2 | 1024x768p60 | XGA | 65MHz |
| 3 | 1280x1024p60 | SXGA | 108MHz |
| 4 | 1920x1080p60 | 1080i | 148.5MHz |
vpg_mode.v的RTL视图如下:

其中切换信号(vpg_mode_change和vpg_mode)可以连接到前面的vpg.v模块的时序参数选择器,以改变HDMI输出的分辨率。
该模块设置了两种方式去切换模式:
1.通过按键KEY1:按下按钮(上升沿)切换。
2.自动切换:在复位后的一段时间(第9个clk_en有效时钟周期)自动切换一次。
分辨率切换是从最高分辨率(FHD_1920x1080p60)切换到最低分辨率(VGA_640x480p60),然后形成循环:

全部0条评论
快来发表一下你的评论吧 !