网站重新上线,多谢朋友们的关心
Oct
17
经常用VHDL的Generate语句,却对Verilog的generate不太熟悉。
下面是查了XST User Guide后得知的Verilog中generate的语法:
1. generate语法有generate for, genreate if和generate case三种
2. generate for语句必须有genvar关键字定义for的变量
3. for 的内容必须加begin和end
4. 必须给for语段起个名字
例子:
更详细的用法请在XST User Guide中搜索generate。
下面是查了XST User Guide后得知的Verilog中generate的语法:
1. generate语法有generate for, genreate if和generate case三种
2. generate for语句必须有genvar关键字定义for的变量
3. for 的内容必须加begin和end
4. 必须给for语段起个名字
例子:
引用
generate
genvar i;
for (i=0; i<=7; i=i+1)
begin : for_name
adder add (a[8*i+7 : 8*i], b[8*i+7 : 8*i],
ci[i], sum_for[8*i+7 : 8*i], c0_or[i+1]);
end
endgenerate
genvar i;
for (i=0; i<=7; i=i+1)
begin : for_name
adder add (a[8*i+7 : 8*i], b[8*i+7 : 8*i],
ci[i], sum_for[8*i+7 : 8*i], c0_or[i+1]);
end
endgenerate
更详细的用法请在XST User Guide中搜索generate。
Jul
10
在Verilog中,可以使用`ifdef很方便地控制程序的结构,比如:
但是如果使用了这种结构,XST是不能自动认出工程的层次结构的,因此综合的时候有可能会报告某个文件找不到的错误。
解决方法是,手动编辑XST生成的xx.prj文件,把漏编译的文件名添加到xx.prj的头上就可以了。
引用
`ifdef FPGA_IMP
module_A_instantiate (
..
..
);
`else
module_B_instantiate (
..
..
);
`endif
module_A_instantiate (
..
..
);
`else
module_B_instantiate (
..
..
);
`endif
但是如果使用了这种结构,XST是不能自动认出工程的层次结构的,因此综合的时候有可能会报告某个文件找不到的错误。
解决方法是,手动编辑XST生成的xx.prj文件,把漏编译的文件名添加到xx.prj的头上就可以了。
Nov
7
整理来源:http://www.edacn.net/index.php/action_viewthread_tid_64616.html
1、语法
声明:
parameter xx = yy;
`define XX YY
使用:
xx
`XX
2、作用域
parameter 作用于声明的那个文件;`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效。
如果想让parameter或`define作用于整个项目,可以将如下声明写于单独文件,并用`include让每个文件都包含声明文件:
`ifndef xx
`define xx yy // or parameter xx = yy;
`endif
`define也可以写在编译器最先编译的文件顶部。通常编译器都可以定义编译顺序,或者从最底层模块开始编译。因此写在最底层就可以了。
3、作用
parameter可以用作例化时的参数传递。具体方法参见《Verilog例化时的参数传递》一文
1、语法
声明:
parameter xx = yy;
`define XX YY
使用:
xx
`XX
2、作用域
parameter 作用于声明的那个文件;`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效。
如果想让parameter或`define作用于整个项目,可以将如下声明写于单独文件,并用`include让每个文件都包含声明文件:
`ifndef xx
`define xx yy // or parameter xx = yy;
`endif
`define也可以写在编译器最先编译的文件顶部。通常编译器都可以定义编译顺序,或者从最底层模块开始编译。因此写在最底层就可以了。
3、作用
parameter可以用作例化时的参数传递。具体方法参见《Verilog例化时的参数传递》一文
Oct
24
Xapp199 - Writing Efficient Testbenches 是一篇挺老的Application Note了,我以前也读过,不过今天再读还是有所收获的。这篇文档还是讲了不少内容的。
Aug
31
类似VHDL的Generic语句,Verilog也可以在例化时传递参数
例子见http://www.sutherland-hdl.com/on-line_ref_guide/vlog_ref_body.html#8.0%20Module%20Instances
传递的参数是子模块中定义的parameter。
传递的方法:
1、module_name #( parameter1, parameter2) inst_name( port_map);
2、module_name #( .parameter_name(para_value), .parameter_name(para_value)) inst_name (port map);
用#方法和port map的写法差不多
3、defparam
defparam heirarchy_path.parameter_name = value;
这种方法与例化分开,参数需要写绝对路径来指定。
例子见http://www.sutherland-hdl.com/on-line_ref_guide/vlog_ref_body.html#8.0%20Module%20Instances
传递的参数是子模块中定义的parameter。
传递的方法:
1、module_name #( parameter1, parameter2) inst_name( port_map);
2、module_name #( .parameter_name(para_value), .parameter_name(para_value)) inst_name (port map);
用#方法和port map的写法差不多
3、defparam
defparam heirarchy_path.parameter_name = value;
这种方法与例化分开,参数需要写绝对路径来指定。








