Verilog DAY6
程序员文章站
2022-07-13 22:30:23
...
1 reg 寄存器 综合成物理连线,锁存器和触发器 always,initial
Wire 综合成真实的物理连线 assign
阻塞赋值 = 用于组合逻辑
非阻塞赋值 <= 用于时序逻辑
Parameter 参数 define宏定义 起作用的范围不同
(1)作用域不同。parameter作用于声明的那个文件;define从编译器读到这条指令开始到编译结束都有效,或者遇到
undef命令使之失效,可以应用于整个工程。
(2)传递功能不同。parameter可以用作模块例化时的参数传递,实现参数化调用;define语句则没有此作用。
define语句可以定义表达式,而parameter只能用于定义变量。
比较点 任务 函数
输入输出 可以有任意多个输入输出 至少一输入不能有输出和双向端口
触发事件控制 任务不能出现always语句;可以包含延时控制语句(#),但只能面向仿真,不能综合 函数中不能出现always、#这样的语句,要保证函数执行在零时间内完成
返回值 通过输出端口传递返回值 通过函数名返回,只有一个返回值
中断 可以由disable中断 不允许由disable中断
调用 任务只能在过程语句中调用,而不能在连续赋值语句中调用 函数可作为赋值操作的表达式,用于过程赋值和连续赋值语句
调用其它 可以调用其它任务和函数 只能调用函数,不能调用任务
其它说明 任务调用语句可以作为一条完整的语句出现 函数调用语句不能单独作为一条语句,出现只能作为赋值语句的右端操作数
2
module detect(clk,rst_n,in,out);
input clk,rst_n,in;
output out;
wire out;
reg temp1,temp2;
aaa@qq.com(posedge clk or negedge rst_n)
if(!rst_n)
begin
temp1<=1'b1;
temp2<=1'b1;
end
else
begin
temp1<=in;
temp2<=temp1;
end
assign out=temp2&(~temp1);
endmodule
`timescale 1ns/1ns
module detect_tb;
reg clk,rst_n,in;
wire out;
detect U1(clk,rst_n,in,out);
initial
begin
clk=1'b1;
rst_n=1'b1;
#10 rst_n=1'b0;
#50 rst_n=1'b1;
end
always #10 clk=~clk;
always @(posedge clk)
in<={$random}%2;
endmodule
错误:语法错误,某一处少了分号