基于CPLD的VHDL代码学习、解析

前人种树,后人乘凉;创造不易,请勿迁移~ 

daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主
daisy.skye擅长嵌入式,Qt,Linux,等方面的知识
https://blog.csdn.net/qq_40715266?type=blog

版权声明:本文为CSDN博主「daisy.skye」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
————————————————

CPLD(Complex Programmable Logic Device)即复杂可编程逻辑器件,是一种数字电路设计的可编程芯片。它由多个可编程逻辑门和存储单元构成,能够实现复杂的逻辑功能和存储功能。

VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述数字电路和系统。其架构分为三层,即实体层、体系结构层和行为层。实体层描述的是被建模的元素或组件的物理结构;体系结构层描述的是实体层的组合方式和交互方式;行为层描述的是元素或组件的功能行为和计算模型。VHDL还提供了一种自定义构造器的语法,可以定义用户自定义的数据类型、运算符和函数,大大方便了编程工作。

简单的来说就0和1,而0和1 的由来可以追溯到20世纪40年代末期,当时美国的数学家和计算机科学家Claude Shannon提出了“布尔代数”(也称“开关代数”),这是一种基于逻辑的数学模型,用于描述和分析数字电路。

布尔代数的核心思想是将逻辑运算符(如与、或、非等)应用到二进制数上,从而实现计算机运算。由于二进制只有0和1两个数,因此在数电中也被称为“真假”或“开关”状态。

利用0和1这两种状态,可以构建各种逻辑门电路,如逻辑与门、逻辑或门、逻辑非门等,这些门可以实现各种算术、逻辑运算和控制功能,从而构成了现代计算机的基础。

而这也造就了vdhl语言,用芯片最了解的语言,0和1 ,也就是上电不上电,这种高低电平的转换来进行控制芯片工作以。

回到代码架构,举例子

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned;

entity tdm_clk is
	port (clk64m: in std_logic;
	       clk2m:buffer std_logic);
end tdm_clk;
architecture rtl of tdm_clk is
signal  count:  std_logic_vector(12 downto 0) :="0000000000000";

	begin
	PROCESS (clk64m, count)----分频模块,8192计数;
		begin
			if (clk64m'event AND clk64m='1') THEN
				if(count = "1111111111111") THEN
				  count <= "0000000000000";
				else
				  count <= count +1;
				end if ;
			end if;
	end process;
	clk2m <= count(4);
end  rtl; 

代码中count是一个12位的计数器。在每个clk64m上升沿时,计数器会增加1。当count达到"1111111111111"时,计数器会被重置为"0000000000000"。

然后,将count的第4位赋值给clk2m。这意味着clk2m的值将等于count的第4位。由于count是一个12位计数器,因此count(4)表示count的第4位。

根据代码中的逻辑,每当count的第4位变为1时,clk2m将变为1。因此,clk2m将以2MHz的频率生成时钟信号。这是因为clk64m的频率为64MHz,而count的计数器在每个clk64m上升沿时增加1,因此count的第4位将在每个clk64m的16个周期内变为1,从而产生2MHz的时钟信号。

你可能感兴趣的:(FPGA,单片机,fpga开发,嵌入式硬件,vhdl)