FPGA之旅---例化
⼀、信号端⼝采⽤名称关联
语法结构:
.PortName(port_expr)
//PortName是顶层的名称,port_expr是底层端⼝
//port_expr可以是⼀下任何类型
1.标识符
2.位选择,如.C(d[0]),C端⼝连接到d信号的第0位
3.部分选择,例.bus(din[5:4])
例:
module yumen(C,A,B)
.
C(T3)//
⼆、各分层模块之编写
底层编写:正常书写后,最后⽤assign语句将输出定义
例:
output [3:0] key_value;
原来的按键输出按键值的次数,那么次数是reg型,
always @(podge clk or negedge rst)
if(!rst)
ci<=5'b0;
el if(dawn_flagr!=4'b0)
ci<=ci+1'b1;
//此时ci是按键输出值,是reg型,此时需要换⼀下输出值,重新定义输出数组,⽤assign 赋值语句将ci赋值给输出
//即
assign key_value=ci;
三、顶层模块的编写
1.所有中间变量必须重新声明,否则会默认为⼀位的
2.注意在对在同⼀条线上的变量命名的时候使⽤同⼀名字
3.模块例化后在连线语法:
module_name1 U1//模块名字空格加U?
(
.clk(clk),//注意,⽤逗号,外边是顶层外部信号,括号内是底层模块信号名字
.rst(rst),
.top_in_signal(U1_in_signal),//顶层输⼊信号进⼊U1模块
....
.U1_signal_output(U2_in),//U1输出连到U2输⼊,此信号需要声明⼀下,否则会默认是⼀位的
....
);//括号内⽤逗号隔开,最后⼀个不加逗号,
module_name2 U2//
(
.clk(clk),//注意,⽤逗号,外边是底层外部信号,括号内是顶层模块信号名字
.rst(rst),
.U2_in(U1_output),
...
.Top_out_signal(U1_out_signal),//不是很确定,有待验证
...
);//⽤分号