https://china.xilinx.com/products/design-tools/microblaze.html
https://china.xilinx.com/products/design-tools/embedded-software/sdk.html
主页url:https://xilinx-wiki.atlassian.net/wiki/spaces/A/overview
移植linux:linux -> xilinx open source linux
xilinx ise
ISE的全称为Integrated Software Environment,即“集成软件环境”,是Xilinx公司的硬件设计工具。
中文名
Xilinx ISE
外文名
Integrated Software Environment
缩 写
ISE
性 质
集成软件环境
目录
1. 1 Xilinx ISE
2. 2 ISE工程设计流程
Xilinx ISE
编辑
ISE的全称为Integrated Software Environment,即“集成软件环境”,是Xilinx公司的硬件设计工具。相对容易使用的、首屈一指的PLD设计环境 ! ISE将先进的技术与灵活性、易使用性的图形界面结合在一起,不管您的经验如何,都让您在最短的时间,以最少的努力,达到最佳的硬件设计。
ISE工程设计流程
编辑
下面主要概述ISE的基本开发流程以及在开发过程中的各个阶段需要用到的工具软件。
图4.29 说明了利用Xilinx公司的ISE开发设计软件的工程设计流程,具体分为五个步骤:即输入(Design Entry)、综合(Synthesis)、实现(Implementation)、验证(Verification)、下载(Download)。
图4.29 ISE的工程设计流程
1)图形或文本输入(Design Entry)
Xilinx ISE软件界面(2张)
图形或文本输入包括原理图、状态机、波形图、硬件描述语言(HDL),是工程设计的第一步,ISE集成的设计工具主要包括HDL编辑器(HDL Editor)、状态机编辑器(StateCAD)、原理图编辑器(ECS)、IP核生成器(CoreGenerator)和测试激励生成器(HDL Bencher)等。
常用的设计输入方法是硬件描述语言(HDL)和原理图设计输入方法。原理图输入是一种常用的基本的输入方法,其是利用元件库的图形符号和连接线在ISE软件的图形编辑器中作出设计原理图,ISE中设置了具有各种电路元件的元件库,包括各种门电路、触发器、锁存器、计数器、各种中规模电路、各种功能较强的宏功能块等用户只要点击这些器件就能调入图形编辑器中。这种方法的优点是直观、便于理解、元件库资源丰富。但是在大型设计中,这种方法的可维护性差,不利于模块建设与重用。更主要的缺点是:当所选用芯片升级换代后,所有的原理图都要作相应的改动。故在ISE软件中一般不利用此种方法。
为了克服原理图输入方法的缺点,目前在大型工程设计中,在ISE软件中常用的设计方法是HDL设计输入法,其中影响最为广泛的HDL语言是VHDL和Verilog HDL。它们的共同优点是利于由顶向下设计,利于模块的划分与复用,可移植性好,通用性强,设计不因芯片的工艺和结构的变化而变化,更利于向ASIC的移植,故在ISE软件中推荐使用HDL设计输入法。
波形输入及状态机输入方法是两种最常用的辅助设计输入方法,使用波形输入法时,只要绘制出激励波形的输出波形,ISE软件就能自动地根据响应关系进行设计;而使用状态机输入时,只需设计者画出状态转移图,ISE软件就能生成相应的HDL代码或者原理图,使用十分方便。其中ISE工具包中的StateCAD就能完成状态机输入的功能。但是需要指出的是,后两种设计方法只能在某些特殊情况下缓解设计者的工作量,并不适合所有的设计。
2)综合(Synthesis)
综合是将行为和功能层次表达的电子系统转化为低层次模块的组合。一般来说,综合是针对VHDL来说的,即将VHDL描述的模型、算法、行为和功能描述转换为FPGA/CPLD基本结构相对应的网表文件,即构成对应的映射关系。
在Xilinx ISE中,综合工具主要有Synplicity公司的Synplify/Synplify Pro,Synopsys公司的FPGA Compiler II/ Express, Exemplar Logic公司的 LeonardoSpectrum和Xilinx ISE 中的XST等,它们是指将HDL语言、原理图等设计输入翻译成由与、或、非门,RAM,寄存器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求优化所形成的逻辑连接,输出edf和edn等文件,供CPLD/FPGA厂家的布局布线器进行实现。
3)实现(Implementation)
实现是根据所选的芯片的型号将综合输出的逻辑网表适配到具体器件上。Xilinx ISE的实现过程分为:翻译(Translate)、映射(Map)、布局布线(Place & Route)等3个步骤。
ISE集成的实现工具主要有约束编辑器(Constraints Editor)、引脚与区域约束编辑器(PACE)、时序分析器(Timing Analyzer)、FPGA底层编辑器(FGPA Editor)、芯片观察窗(Chip Viewer)和布局规划器(Floorplanner)等。
4)验证(Verification)
验证(Verification)包含综合后仿真和功能仿真(Simulation)等。功能仿真就是对设计电路的逻辑功能进行模拟测试,看其是否满足设计要求,通常是通过波形图直观地显示输入信号与输出信号之间的关系。
综合后仿真在针对目标器件进行适配之后进行,综合后仿真接近真实器件的特性进行,能精确给出输入与输出之间的信号延时数据。
ISE可结合第三方软件进行仿真,常用的工具如Model Tech公司的仿真工具ModelSim和测试激励生成器HDL Bencher ,Synopsys公司的VCS等。通过仿真能及时发现设计中的错误,加快设计中的错误,加快设计进度,提高设计的可靠性。
每个仿真步骤如果出现问题,就需要根据错误的定位返回到相应的步骤更改或者重新设计。
5)下载(Download)
下载(Download)即编程(Program)设计开发的最后步骤就是将已经仿真实现的程序下载到开发板上,进行在线调试或者说将生成的配置文件写入芯片中进行测试。在ISE中对应的工具是iMPACT。
https://china.xilinx.com/products/design-tools/microblaze.html
https://china.xilinx.com/products/design-tools/embedded-software/sdk.html
转载于:https://my.oschina.net/u/2963604/blog/3077356
原语,即primitive。不同的厂商,原语不同;同一家的FPGA,不同型号的芯片,可以也不一样;原语类似最底层的描述方法。使用原语的好处,可以直接例化使用,不用定制IP;即可通过复制原语的语句,然后例化IP,就可使用;Xilinx是通过直接修改原语中的参数再例化IP来使用;Xilinx公司的原语分为10类,包括:计算组件,IO端口组件,寄存器/锁存器,时钟组件,处理器组件,移位寄存器,配置和检测组件,RAM/ROM组件,Slice/CLB组件,G-tranceiver。下图所示为UG799中对原语的分类列表。
项目中实际用到了串并转换,时钟BUFF,因此选择部分重点讲解,具体可以参考UG799和对于手册,如IO可以参考UG471。1.串并转换 OSERDESE2
OSERDES 7系列设备专用于并行串行转换器,具有特定的时钟和逻辑资源,旨在促进高速资源同步接口的实现。每个OSERDES模块都包含用于数据和三态控制的专用序列化器。可以采用单数据率(SDR)和双数据率(DDR)模式进行配置。数据串行化可以达到8:1(如果使用OSERDESWidthExpansion,则可以达到10:1或14:1)。3-state序列器可以达到4:1。 具体实现10bit转串行数据:
在Language Templates ----->Verilog里面可以搜索对应原语;
// OSERDESE2 : In order to incorporate this function into the design, // Verilog : the following instance declaration needs to be placed // instance : in the body of the design code. The instance name // declaration : (OSERDESE2_inst) and/or the port declarations within the // code : parenthesis may be changed to properly reference and // : connect this function to the design. All inputs // : and outputs must be connected. // <-----Cut code below this line----> // OSERDESE2: Output SERial/DESerializer with bitslip // Artix-7 // Xilinx HDL Language Template, version 2017.4 wire [1:0] shift_data; OSERDESE2 #( .DATA_RATE_OQ("DDR"), // DDR, SDR The DATA_RATE_OQ attribute defnes whetherdataisprocessedassingle datarate(SDR)ordoubledatarate (DDR).其中SDR是只上升沿采样或下降沿采样,DDR只上升沿和下降沿同时采样; .DATA_RATE_TQ("DDR"), // DDR, BUF, SDR------------同理控制三态的 .DATA_WIDTH (4 ), // Parallel data width (2-8,10,14) .INIT_OQ(1'b0), // Initial value of OQ output (1'b0,1'b1),给0 给1其实都可以 .INIT_TQ(1'b0), // Initial value of TQ output (1'b0,1'b1) .SERDES_MODE("MASTER"), // MASTER, SLAVE .SRVAL_OQ(1'b0), // OQ output value when SR is used (1'b0,1'b1) ---SR:复位 .SRVAL_TQ(1'b0), // TQ output value when SR is used (1'b0,1'b1) .TBYTE_CTL("FALSE"), // Enable tristate byte operation (FALSE, TRUE) .TBYTE_SRC("FALSE"), // Tristate byte source (FALSE, TRUE) .TRISTATE_WIDTH(1) // 3-state converter width (1,4),该数据必须查手册,不同位宽和采样模式对应数据不一样 ) OSERDESE2_inst1 ( .OFB( ), // 1-bit output: Feedback path for data,返回的数据,不使用时可以留空 .OQ(OQ), // 1-bit output: Data path output,输出的串行数据 // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each),输出类型未使用时可以空着 .SHIFTOUT1( ), .SHIFTOUT2( ), .TBYTEOUT( ), // 1-bit output: Byte group tristate,三态的可空着 .TFB(TFB), // 1-bit output: 3-state control .TQ(TQ), // 1-bit output: 3-state control .CLK(sys_clk_5x), // 1-bit input: High speed clock .CLKDIV(sys_clk_1x), // 1-bit input: Divided clock // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each) .D1(Data_in[0]), .D2(Data_in[1]), .D3(Data_in[2]), .D4(Data_in[3]), .D5(Data_in[4]), .D6(Data_in[5]), .D7(Data_in[6]), .D8(Data_in[7]), .OCE(1'b1), // 1-bit input: Output data clock enable,输出时钟使能,始终让他为1即可 .RST(sys_rst), // 1-bit input: Reset // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each) .SHIFTIN1(shift_data[0]), .SHIFTIN2(shift_data[1]), // T1 - T4: 1-bit (each) input: Parallel 3-state inputs,三态输入端,没有用到统一填0 .T1(0), .T2(0), .T3(0), .T4(0), .TBYTEIN(0), // 1-bit input: Byte group tristate .TCE(0) // 1-bit input: 3-state clock enable ); // End of OSERDESE2_inst instantiation
下图描述TRISTATE_WIDTH的选取:
与10bit并转串代码段中还应添加OSERDESE2_inst2,与此类似稍作修改即可,不再赘述。2. 单端信号转差分信号:OBUFDS
如果直接用下面的逻辑生成则会出现p端逻辑和n端逻辑差一个反相器,路径延时不一致,指示差分结果出错;
assign diff_data_p = data_ser; assign diff_data_n = ~data_ser;
同样可以使用原语:OBUFDS
OBUFDS #( .IOSTANDARD("DEFAULT"), // Specify the output I/O standard .SLEW("SLOW") // Specify the output slew rate ) OBUFDS_inst ( .O(O), // Diff_p output (connect directly to top-level port) .OB(OB), // Diff_n output (connect directly to top-level port) .I(I) // Buffer input );
3. IBUFG和IBUFGDS(IO)
IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。 IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和 SSTL等多种格式的IO标准。 IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。
举例说明:差分时钟芯片输入的100MHz时钟,作为FPGA的全局时钟。
IBUFGDS #( .DIFF_TERM ("TRUE" ), .IBUF_LOW_PWR ("FALSE") ) u_ibufg_clk_100 ( .I (FP_CLK_100M_P), .IB (FP_CLK_100M_N), .O (clk_100m ) );