VHDL代码问题

2025-04-16 09:19:59
推荐回答(1个)
回答(1):

这个代码的用途从entity的port部分就基本上可以看出端倪来。
首先是有三个端口,一个是外部时钟得到100MHz的信号,这个是从板载晶震上面得到的。
之后第二个端口clkOut100kHz,是从100MHz上面截取的100kHz的输出。
之后第三个端口是reset,从已经连接的端口上得到高电平出发重置。

简单说一下VHDL
clkSys100MHz : in STD_LOGIC;

意思是,针脚clkSys100MHz,输入,标准逻辑库,二值,只有‘0’和‘1’两种状态。
那么
clkOut100KHz : out STD_LOGIC;

意思是,针脚clkOut100KHz,输出,标准逻辑库,二值,‘1’为高电平,‘0’为低电平。
之后同理。

但是具体是第几针脚,需要去在编译器里面看pin planner,具体对应的几号物理针脚。输出电平具体是多少,也需要从pin planner里面看输出电平是多少。通常的FPGA芯片都有1.8V, 2.5V, 3.0V, 3.3V几种电平输出状态。

VHDL语言非常直观,简单来讲,在这个例子里通过一个二进制计数器来实现,简单的举一个例子,如果你的晶振是100MHz,你想要50MHz的输出,那么就是每两个100MHz的高电平触发一次25MHz针脚的高电平输出。我用C语言给你表达一下:
int counter = 0;
if (clkSys100MHz == '1') //高电平
{
if (counter == 1) //从0到1,也就是100MHz时钟触发2次

{

clkOut = '1'; //输出高电平

}

else if (counter == 3) // 之后经过2-3,100MHz时钟再触发两次

{

clkOut = '0'; //输出低电平

}
if (counter > 3)

{

counter = 0; //重置计数器

}

counter ++;

}

如果用C语言这么干,显得非常笨,但是VHDL基本上这么操作。
上面这个代码的意思就是这样。