写了一个简单的verilog程序,仿真的时候为什么和我的逻辑正好是相反的?求哪位高手帮忙看下。
程序如下:moduleexample5(clk,x,z,reset);inputclk,reset;input[3:0]x;outputz;//reg[2:0]state...
程序如下:
module example5(clk,x,z,reset);
input clk,reset;
input [3:0]x;
output z;
//reg [2:0] state;
reg z;
always@(posedge clk or negedge reset)
begin
if(!reset)
z=1'bx;
else
if(x==4'b1111)//这里定义的x等于1111时,z等于0
z=1'b0;
else if(x==4'b0000)
z=1'b1;
else z=1'bx;
end
endmodule
测试程序:
`timescale 10ps/10ps
module test;
reg clk,reset;
wire z;
reg [3:0]x;
initial
begin
x=4'b1111;
clk=0;
reset=1;
#2 reset=0;
#10 reset=1;
end
always #5 clk=~clk;
always@(posedge clk)
x=~x;
example5 t(.x(x),.z(z),.clk(clk),.reset(reset));
endmodule
但是仿真结果却是:
x等于1111时,z等于1 展开
module example5(clk,x,z,reset);
input clk,reset;
input [3:0]x;
output z;
//reg [2:0] state;
reg z;
always@(posedge clk or negedge reset)
begin
if(!reset)
z=1'bx;
else
if(x==4'b1111)//这里定义的x等于1111时,z等于0
z=1'b0;
else if(x==4'b0000)
z=1'b1;
else z=1'bx;
end
endmodule
测试程序:
`timescale 10ps/10ps
module test;
reg clk,reset;
wire z;
reg [3:0]x;
initial
begin
x=4'b1111;
clk=0;
reset=1;
#2 reset=0;
#10 reset=1;
end
always #5 clk=~clk;
always@(posedge clk)
x=~x;
example5 t(.x(x),.z(z),.clk(clk),.reset(reset));
endmodule
但是仿真结果却是:
x等于1111时,z等于1 展开
3个回答
展开全部
问题可能在这一句
always@(posedge clk or negedge reset)
begin
if(!reset)
z=1'bx;
else
if(x==4'b1111)//这里定义的x等于1111时,z等于0
z=1'b0;
else if(x==4'b0000)
z=1'b1;
else z=1'bx;
end
你always语句后面跟的是posedge clk,那后面应该用非阻塞赋值吧,就是这个“<=”,这样的话就会延时一个时钟输出,因为你用的是时钟的上升沿,所以会出现上面的情况,你干脆用assign语句算了,还方便
always@(posedge clk or negedge reset)
begin
if(!reset)
z=1'bx;
else
if(x==4'b1111)//这里定义的x等于1111时,z等于0
z=1'b0;
else if(x==4'b0000)
z=1'b1;
else z=1'bx;
end
你always语句后面跟的是posedge clk,那后面应该用非阻塞赋值吧,就是这个“<=”,这样的话就会延时一个时钟输出,因为你用的是时钟的上升沿,所以会出现上面的情况,你干脆用assign语句算了,还方便
VSH艾羽
2024-10-27 广告
2024-10-27 广告
Abaqus是一款功能强大的有限元分析软件,广泛应用于航空航天、汽车、建筑等多个工程领域。它能够模拟复杂结构在静力、动力、热传导、非线性等条件下的行为,提供详尽的分析结果。Abaqus支持多种材料模型和单元类型,能够处理高度非线性问题,确保...
点击进入详情页
本回答由VSH艾羽提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询