CPLD——将LatticeLDF文件转换为Xilinx Xabel格式

描述

关键词:ABEL,翻译

以下是一些帮助您将LatticeLDF文件格式转换为XilinxABEL的提示。

解决方案

技术转换:LatticeLDF文件到XilinxABEL格式的有益提示

这个答案记录假设你有ABEL语言的一些基本知识。

所需的第一步是删除LDF到XABEL转换中不需要的所有额外行。这些是LDF文件中的第一行代码,它们在删除时使转换更干净。

删除如下所示的线条:
“LDF 1.00 .00设计LDF;
“设计CONT 1”;

删除以“项目名称”开头的行
删除“声明”行
删除“结束”行

然后,从“Sym”和“结束”行开始删除每一行。另外,请确保在删除这些行的地方留下空白行,以便在转换过程中保持一些容易看到的模块性。

LDFLE中的每个GLB模块都有一个信号声明,描述GLB模块将产生的输出。这些信号中的一些映射到物理端口,其中一些信号被用作内部节点,这些节点可以跨越其他GLB模块。
------------------------------------------

下面是典型的LDF文件中看到的通用情况,以及它们等效的XabelEng译。

以下是GLB模块内输出信号声明的两个示例。

LDFfile非注册信号的信号声明

SigType iRAM0异步输出;

在ABEL代码中,如果信号为PIN,则向信号声明列表添加以下内容:
IrAM0引脚ISTYPE“Reg”;

在ABEL代码中,如果信号仅仅是内部信号,则向信号声明列表添加以下内容:
IRA0节点ISTYPE“Reg”;

------------------------

JK触发器LDF文件中的信号声明

SIGType ICAS3退出;
FJK11(RCNTR,JRONKOLL,KROYCOL,ICLK);

在ABEL代码中,如果信号是内部的,则向信号声明列表添加以下内容:

ICAS3节点ISTYPE“ReGijjk”;

在ABEL代码中,如果信号映射到物理PIN,则向信号声明列表添加以下内容:

ICAS3 PIN ISTYPE“ReGijjk”;

在ABEL代码中,向方程声明添加以下内容:

ICAS3.j=JCAS3;
ICAS3.K=KCAS3;
ICAS3.CLK=ICLK;

其中“JCAS3”是映射到J输入的信号,“KCAS3”映射到K输入,并且“ICLK”映射到CLK输入。

------------------------

触发器LDF文件中的信号声明

SIGTYPE XCRTS退出;
XCRTS.CKK=IICLK;

其中“IICLK”是连接到触发器的时钟信号。


在ABEL代码中,如果翻转翻转仅在内部使用,则向端口声明添加以下内容:

XCRTS节点ISTYPE“Reg”;

在ABEL代码中,如果触发器还用作物理PIN,则向端口声明添加以下内容:

XCRTS PIN ISTYPE“Reg”;

向方程声明添加以下内容:

XCRTS.CKK=IICLK;

其中IICLK是系统时钟信号。

注意,GLB声明中只有一个已注册的输出必须具有时钟分配。其他不必明确地连接到时钟,因为在体系结构中,当一个注册输出连接到一个GLB中的时钟时,其他寄存器就没有其他选择,而不是连接到相同的时钟信号。因此,如果在GLB模块中找到一个“SygType xxxx Reg OUT”声明,则查找时钟,它驱动GLB模块中的任何输出寄存器,如果找不到“XXXX”的时钟分配。

--------------------------

如何知道信号是一个节点还是一个输出引脚?
答:
如果信号是一个PIN,您将看到同一个信号线中包含的相同的信号名称,该文本行以“XPin”开头,这意味着该信号连接到物理引脚。

如何知道注册信号是JK触发器还是D触发器?
答:
如果已注册的信号是JK触发器,您将看到包含在文本模式中的信号,该文本模式“FJK11”如下:

FJK11(RCNTR,JRONKOLL,KROYCOL,ICLK);

其中RCNTR是来自这个寄存器的信号。

另一方面,如果信号来自D触发器,你会看到这个。
信号出现在一条看起来如下的线路中:

RQ0.CK=ICLK;

其中“ICLK”是驱动D触发器时钟的信号。记住,当使用Lattice架构时,JK触发器的实现将“花费”两个寄存器。

------------------------------------------

请记住,在GLB内没有信号在代码中的任何地方被声明。这些信号在GLB中是局部的,必须在ABEL代码中声明为“节点”。

------------------------------------------

这是一个非注册输出引脚的例子,它把信号IRAM0送到外面的世界。只有当需要PIN反馈时,才会使用信号“XIRAM0”。注意,在连接到物理输出引脚之前,必须将IRAM0声明为“SIGTYPE”。

Sym IOC IO46 1;
XPIN IRAIAM0;
OB11(XRAM0,IRA0);
结束;

在ABEL代码中,向信号声明列表添加以下内容:
IRAM0引脚;
------------------------------------------
这是如何在LDF文件中声明输入时钟信号的示例。“CLK”一词告诉软件为这个信号使用全局资源:

Sym IOC Y0 1;
XPIN CLK XSysSK CLK锁20;
I11(ICLK,XysSyLCK);
结束;

在我们的软件中,我们不需要告诉综合器一个信号将使用一个全局资源,因此下面将是ABEL中的等效翻译:

ICLK引脚;
------------------------------------------

这是一个注册输入引脚的例子。信号“IA13”是将在代码中使用的信号。“IICLK”是这个注册PIN使用的时钟:

Sym IOC IO17 1;
XPIN IO XA13;
ID11(A13,XA13,IICLK);
结束;

在ABEL代码中,向信号声明添加以下内容:

A13引脚ISTYPE“Reg”;

在ABEL代码中,向方程声明添加以下内容:

A13CK=IICLK;

------------------------------------------


转换方程

方程在Xabel/LDF格式之间几乎是相同的。然而,发现的唯一差别是LDF文件中的$$实际上是ABEL中的“$”,这意味着XOR。

------------------------------------------

宏翻译时的提示

宏通常在LDF文件中具有以下格式:

LDF宏(OutPut1、OutPut2、InPut1、IntP2);

注意,输出位于左侧,而宏的输入位于左侧。

如果你想帮助这个答案记录更完整和有用,请发一封电子邮件到:
热特性曲线@ XILIXX.com
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-29 15:00:12 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它