Verilog 层次化文件设计是通过顶层文件+调用的子模块来完成代码功能的实现。这里的顶层文件可以理解为是实体电路中的连线步骤,而子模块就是电路元件。本文采用文本形式编写顶层文件。
![层次化文件设计示例](https://img-blog.csdnimg.cn/20200917122346361.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L011cmRvY2sw,size_16,color_FFFFFF,t_70#pic_center)
设置顶层文件先打开文件界面显示所有文件,再选择你要设置为顶层文件的文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200917122857136.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L011cmRvY2sw,size_16,color_FFFFFF,t_70#pic_center)
选中后右键点击set as Top-Level Entity即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200917123220254.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L011cmRvY2sw,size_16,color_FFFFFF,t_70#pic_center)
顶层文件
module cdkzq(clk,en,Q,codeout); //彩灯控制器
input clk,en;
output [2:0] Q; //计数器输出
output [6:0] codeout; //译码器输出
zsr_4253_2_1 a(clk,en,Q); //调用计数器子模块
zsr_4253_2_2 b(Q,codeout); //调用译码器子模块
endmodule
计数器子模块
module jsq(clk,en,Q);//计数器
input clk,en; //输入时钟和使能
output reg[2:0] Q; //计数器输出
always@(posedge clk) //时钟上升沿执行
begin
if(en == 1'b1) //使能端处于高电平自加
begin
if(Q < 3'd6)
Q <= Q + 1'b1;
else
Q <= 0;
end
else
Q <= Q;
end
endmodule
译码器子模块
module zsr_4253_2_2(Q,codeout); //译码器
input [2:0]Q; //译码器输入接收计数器输出
output reg[6:0]codeout; //译码器输出
always@(Q)
begin
case(Q)
3'd0:codeout <= 7'b000_0001; //Q为0 点亮a管
3'd1:codeout <= 7'b000_0010; //Q为1 点亮b管
3'd2:codeout <= 7'b000_0100; //Q为2 点亮c管
3'd3:codeout <= 7'b000_1000; //Q为3 点亮d管
3'd4:codeout <= 7'b001_0000; //Q为4 点亮e管
3'd5:codeout <= 7'b010_0000; //Q为5 点亮f管
3'd6:codeout <= 7'b000_0000; //Q为6 不亮
default:codeout <=7'b000_0000;
endcase
end
endmodule