tag 标签: generic

相关博文
  • 热度 28
    2014-8-6 16:43
    16451 次阅读|
    0 个评论
    最近在准备找工作,复习了一下VHDL与Verilog的语法知识,以前大多用Verilog写代码,突然写VHDL总是有点不适应,特别在运算符,操作符上,两种语言差别比较大,还有一些常用的语句,比如if,begin end 等容易混淆。   对比着学习两种语言更能深入理解每种语言,这次选择端口映射和参数传递方面做个比较。 VHDL的参数传递需要声明和映射,声明语句generic(n:integer:=8);初始值可有可无,映射语句为generic map(n=4) 。VHDL的端口映射有位置关联方式和名字关联方式, 位置关联为port map(a1);a1为本模块信号。 名字关联方式为port map(a=a1); a为例化元件端口,a1为本模块连接端口的信号。   verilog的参数传递使用parameter和#,parameter 定义参数,必须要赋初值, parameter n=8; 映射的时候#(4)就可以了。verilog的端口映射也分为位置映射和名字关联映射。 位置关联为u1(a1,b1);a1,b1为本模块中连接端口的信号; 名字关联是u1(.a(a1),.b(b1));a,b为例化元件信号,a1,b1,连接端口的信号。 带例化元件 module andx(a,c); 顶层设计 input d; output q1,q2; wire d1; wire d2;    assign d1=d ;  assign d2=d ; andx #(2) u1(.a(d1),.c(q1)); andx #(6) u2(.a(d2),.c(q2)); 这两种语言的例化方式基本相同,都是将带例化的端口信号放在前面包含.a(a1)或指向a=a1要连接端口的信号。 下面用一个与门作为例子。两种语言实现相同的功能。 VHDL library ieee; use ieee.std_logic_1164.all;   entity andn is generic (n:integer); port( a:in std_logic_vector(n-1 downto 0); c:out std_logic ); end andn;   architecture behav of andn is begin    process(a)     variable int:std_logic;    begin    int :='1';   for i in 0 to a'length-1 loop       if a(i)='0' then int :='0';       end if;   end loop;   c=int;  end process; end behav;     library ieee; use ieee.std_logic_1164.all;   entity exn is port( d1,d2,d3,d4,d5,d6,d7:in std_logic; q1,q2:out std_logic );   end exn;   architecture behav of exn is      component andn    generic (n:integer);    port(     a:in std_logic_vector(n-1 downto 0);     c:out std_logic      );    end component; begin    U1:andn generic map(n=2) port map(a(0)=d1,a(1)=d2,c=q1);   U2:andn generic map(n=5) port map(a(0)=d3,a(1)=d4,a(2)=d5,a(3)=d6,a(4)=d7,c=q2); end behav;   Verilog : module andx(a,c); parameter n=8; input a; output reg c; integer j; reg int1;   always @(a)   begin      int1=1;     for(j=0;j       if(a ==0) int1=0;     c=int1; end    endmodule   module top_andx(d,q1,q2); input d; output q1,q2;   andx #(2) u1(d ,q1); andx #(6) u2(d ,q2); endmodule    ;j=j+1)      
相关资源