一、一个完整的module的结构的参考模型:
·define AAAA BBBB //宏定义
`include "CCCC.v" //文件包含
`timescale 1ns/1ns //时间刻度定义
//====================================================================================================
module DDDD (完整的端口列表); //模块声明,注意端口列表的完整
input [宽度声明] E; //输入、输出、双向端口及宽度的声明
output [宽度声明] F;
inout [宽度声明] G;
//===================================================================================================
reg [宽度声明] F; //如果输出使用行为级描述的,记得要再声明为reg
reg [宽度声明] H; //模块内部需要的变量
wire [宽度声明] J; //模块中使用的线网
integer [宽度声明] J; //整数型,记得符号
//===================================================================================================
parameter K = 数值; //参数声明部分
//===================================================================================================
always @(posedge 信号 or negedge 信号) //对边沿信号的动作敏感,体现为时序电路
begin
F <= E; //采用非阻塞方式赋值
end
//===================================================================================================
always @(信号); //对信号的电平动作敏感,体现为组合电路
begin
F = ~E; //采用阻塞方式赋值
end
//===================================================================================================
assign G = ^E; //简单或逻辑清晰的组合逻辑可以使用数据流语句
//===================================================================================================
and and1(out, in1, in2); //门级调用
//===================================================================================================
KKK my_kkk(端口连接); //实现实例化其他模块,记得保证端口连接方式的正确
//===================================================================================================
task mmm; //函数和任务的层次级别,和门级、数据流级、行为级的语法级别是一 致的
endtask
function nnn;
endfunction
endmodule
二、应用实例
信号同步
检测信号输入信号的变化,同时跟随信号的变化产生一个输出值。
RTL电路如下图所示
//检测信号输入信号的变化,同时跟随信号的变化产生一个输出值。
module follow(in, out, clock);
input [7:0] in;
input clock;
output[7:0] out;
reg [7:0] out;
always @(posedge clock)begin
#1 out = in >> 1 ;
end
endmodule
仿真结果如图所示
声明:该文只适用于学习,其内容包含来自书本的摘抄和总结,欢迎大家补充,共同学习进步。