首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

sysgen(system generator)下的使用black box导入现有的HDL模

sysgen(system generator)下的使用black box导入现有的HDL模

导入外部的HDL程序模块


System generator支持导入HDL设计,能以黑盒子(Black Box)的方式导入VHDLVerilog HDL以及EDIF设计文件。在模型设计中,黑盒子模块和普通的System generator一样,能实现模块间的互相连接、参与仿真以及被编译成硬件电路。

1.黑盒子HDL代码的要求

黑盒子模块队导入的HDL代码格式有一定的限制,其具体要求如下:


HDL实体的名字不能和设计中已有的模块名字重复;


顶层黑盒子实体中不能出现双向端口;


对于Verilog黑盒子,其模块和端口名必须小写,且命名要规范;


HDL模块的时钟信号以及时钟使能信号都必须是标准逻辑类型,即不能使用矢量输入信号,如:
input clk1, clk2;是合法的
input [1:0] clk; 是不合法的


黑盒子代码的时钟和时钟使能信号必须成对出现,即出现一个时钟信号,则必须有一个时钟使能信号。且时钟信号的名字中必须包含字符串clk,时钟使能信号的名字必须包含字符串ce,一对时钟信号和时钟使能信号的名字只能有clkce不同,如my_clk_1my_ce_1



2.黑盒子配置向导

System Generator提供了由HDL代码到黑盒子模块转化的可配置向导,用于简化整个流程。可配置向导首先检查VHDLVerilog代码的语法检查,然后根据语义分析的结果将其转换成.m函数,最后再将.m函数和黑盒子模块关联起来。生成的可配置.m函数是否可用取决于导入的HDL代码的复杂度。将在5.5.1节给出说明,指出在哪些细节下,必须对其生成的代码进行手工修改以修正可配置向导的不足。

1)
启动可配置向导

当在设计中添加一个黑盒子模块时,配置向导会自动启动。注意:在添加黑盒子之前,要将导入的HDL文件放在设计模型的文件夹中。可配置向导只在设计文件.mdl所在的文件中寻找.v.vhd文件,如果没有找到相关文件,则会弹出警告提示对话框,如图7-47所示。

<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_94501360583111391 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s12.sinaimg.cn/mw690/735f2910gd5715405847b&690" width=465 height=164 real_src="http://s12.sinaimg.cn/mw690/735f2910gd5715405847b&690">

                        
警告提示对话框


当找到.v或者.vhd文件后,可配置向导会弹出一个新的对话框,并列出所有HDL文件,如图7-48所示。然后选中要导入的文件,点击“Open”按钮即可完成整个流程。自动生成的.m文件的名字为
“_config.m”,且存放在设计文件夹中。就是导入的HDL文件的名字。



2)
可配置向导的一些细节

可配置向导在运行过程中会自动提取大量的信息,并执行相应的转换,但是有些细节必须通过手动修改才能完成,如表7-12所示。另外,可配置向导会在.m函数相应的地方添加注释以提示设计人员。


<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_51731360584095955 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s11.sinaimg.cn/mw690/735f2910gd57169bdb2ca&690" real_src="http://s11.sinaimg.cn/mw690/735f2910gd57169bdb2ca&690">

3.可配置.m函数

导入的HDL文件都是以黑盒子模块来描述的,因此原HDL文件所有的信息都通过可配置.m函数加载到黑盒子中。可配置.m函数不仅定义了接口、物理实现以及仿真行为等信息,还包括以下配置信息:顶层模块的实体名字、VHDLVerilog语言选择标志、端口描述、模块的一般性需求、时钟和采样速率、和模块有关的所有文件信息以及模块中是否含有组合逻辑路径。


例如:


在新的文件中拉入两个 black box


<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_1791360584227830 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s16.sinaimg.cn/mw690/735f2910gd571ad52346f&690" width=663 height=424 real_src="http://s16.sinaimg.cn/mw690/735f2910gd571ad52346f&690">
然后会自动弹出
<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_62431360584315977 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s11.sinaimg.cn/mw690/735f2910gd571b1ac8dba&690" width=634 height=481 real_src="http://s11.sinaimg.cn/mw690/735f2910gd571b1ac8dba&690" action-type="show-slide" action-data="http%3A%2F%2Fs11.sinaimg.cn%2Fmw690%2F735f2910gd571b1ac8dba%26690">


分别有两个编写好的HDL文件,一个verilog,一个VHDL。分别选择一个HDL 文件。


<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_4281360584365751 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s4.sinaimg.cn/mw690/735f2910gd571aad10103&690" width=690 height=395 real_src="http://s4.sinaimg.cn/mw690/735f2910gd571aad10103&690">
然后如果我们要使用modelsim仿真的话,要拖入这个
<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_77171360584616983 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s7.sinaimg.cn/mw690/735f2910gd571aae08c16&690" width=690 height=316 real_src="http://s7.sinaimg.cn/mw690/735f2910gd571aae08c16&690">


然后双击black box图标。


我们注意到在Block configuration m-function一栏中,会自动出现自动生成的文件,这个文件是可配置的。
<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_42341360585406638 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s15.sinaimg.cn/mw690/735f2910gd571aae6955e&690" real_src="http://s15.sinaimg.cn/mw690/735f2910gd571aae6955e&690" action-type="show-slide" action-data="http%3A%2F%2Fs15.sinaimg.cn%2Fmw690%2F735f2910gd571aae6955e%26690">

在HDL co-simulator中填入
ModelSim ,注意大小写。


然后点运行,会自动弹出modelsim仿真


<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_24691360585622283 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s12.sinaimg.cn/mw690/735f2910gd571f1f083ab&690" width=690 height=440 real_src="http://s12.sinaimg.cn/mw690/735f2910gd571f1f083ab&690" action-type="show-slide" action-data="http%3A%2F%2Fs12.sinaimg.cn%2Fmw690%2F735f2910gd571f1f083ab%26690">

注意在Inactive 情况下scope没有波形。。。只有在modelsim或者ISE下scope才有波形


<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" name=image_operate_7601360585853984 alt="sysgen(system generator)下的使用black box导入现有的HDL模块,并使用modelsim模块仿真" src="http://s14.sinaimg.cn/mw690/735f2910gd571ff74bb6d&690" width=622 height=425 real_src="http://s14.sinaimg.cn/mw690/735f2910gd571ff74bb6d&690" action-type="show-slide" action-data="http%3A%2F%2Fs14.sinaimg.cn%2Fmw690%2F735f2910gd571ff74bb6d%26690">




下面是实现编写好的verilog文件和VHDL 文件


shutter.v 文件内容
// `timescale 1 ns / 1 ns


`define false 0
`define true 1


module shutter(clk, ce, din, latch, dout);
  
  
parameter din_width = 6;
  
parameter dout_width = 6;


  
input   
clk, ce;
  
input [din_width-1:0] din;
  
input latch;
  
output [dout_width-1:0] dout;
  
wire [dout_width-1:0]
dout;
  
reg [dout_width-1:0]  
dout_reg;
  
reg     
dout_valid_reg;


  
reg [din_width-1:0]  
dly_din;


  
assign   
dout = dout_reg;
  
  
// Delay input on clock cycle
  
// always @(posedge clk or ce) begin : sample
  
always @(posedge clk) begin : sample
     
if(ce & latch) begin

dly_din <= din;
     
end
  
end


  
// Mux that selects current value or previous value.
  
always @(ce or latch or din or dly_din) begin : mux
     
if(!ce | !(latch)) begin

dout_reg <= dly_din;
     
end else begin

dout_reg <= din;
     
end
  
end
endmodule // shutter




word_parity_block.vhd 文件内容


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;


entity word_parity_block is

generic (
   
width: integer := 8

);

port (
   
din: in std_logic_vector(width - 1 downto 0);
   
parity: out std_logic

);
end word_parity_block;


architecture behavior of word_parity_block is
begin
WORD_PARITY_Process:
process (din)
  
variable partial_parity : std_logic := '0';

begin
   
partial_parity := '0';


   
XOR_BIT_LOOP: for N in din'range loop
     
partial_parity := partial_parity xor din(N);
   
end loop;
-- N


   
parity <= partial_parity after 1 ns ;

end process WORD_PARITY_Process;
end behavior;

返回列表