原创 AHDL和VHDL两种语言的Component端口映射

2008-3-18 17:54 6508 9 9 分类: FPGA/CPLD

VHDL中,Component端口映射有2种方法:位置映射和名称映射。前者书写简单,但后者代码可读性更高,且不容易出错。Hustzq就习惯于后一种方法。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


如果component中端口的比特位数和实际电路中的位宽一致,那么直接映射就可以了。那么,不一致的时候如何处理呢?


实例:用lpm_bustri做总线控制,一个元件控制总线的地址数据线(32位)和控制信号线(若干条)。


AHDL(部分代码):


--数据/地址线32


AD_B[31..0] = lpm_bustri.result[31..0];


AD_A[31..0] = lpm_bustri.tridata[31..0];


lpm_bustri.data[31..0] = AD_B[31..0];


--控制字4


C _B[3..0] = lpm_bustri.result[35..32];


C _A[3..0] = lpm_bustri.tridata[35..32];


lpm_bustri.data[35..32] = C _B[3..0];


--控制信号线2


F_B = lpm_bustri.result[36];


F_A = lpm_bustri.tridata[36];


lpm_bustri.data[36] = F_B;


      


In_B = lpm_bustri.result[37];


In_A = lpm_bustri.tridata[37];


lpm_bustri.data[37] = In_B;


 


VHDL(部分代码):


result(31 DOWNTO 0) => AD_B,


tridata(31 DOWNTO 0) =>AD_A,


data(31 DOWNTO 0) => AD_B,


 


result(35 DOWNTO 32) => C_B,


tridata(35 DOWNTO 32) => C_A,


data(35 DOWNTO 32) => C_B,


 


result(36) => F_B,


tridata(36) => F_A,


data(36) => F_B,


 


result(37) => In_B,


tridata(37) => In_A,


data(37) => In_B,


 


第一次接触AHDL2种语言同时使用时还真容易搞混淆,VHDL差点写成“result[31..0] => AD_B”。总体感觉,VHDL的语法是很严格的,用什么数据类型、位宽多少都必须先定义,否则就是错误,AHDL就要宽松些。


 

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条