写了一个简单的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
展开
 我来答
HP_ccyz2012
2012-08-10 · TA获得超过131个赞
知道答主
回答量:97
采纳率:0%
帮助的人:56.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语句算了,还方便
VSH艾羽
2024-10-27 广告
Abaqus是一款功能强大的有限元分析软件,广泛应用于航空航天、汽车、建筑等多个工程领域。它能够模拟复杂结构在静力、动力、热传导、非线性等条件下的行为,提供详尽的分析结果。Abaqus支持多种材料模型和单元类型,能够处理高度非线性问题,确保... 点击进入详情页
本回答由VSH艾羽提供
hsboyfxj
2012-08-21
知道答主
回答量:44
采纳率:0%
帮助的人:16.6万
展开全部
结果就是这样的啊。你是用时钟沿去采的,相当于Z比X延迟了一拍....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lihongfei_sky
2012-08-10
知道答主
回答量:49
采纳率:0%
帮助的人:21.6万
展开全部
你的仿真结果是正确的,是你对于always的理解错了
追问
那应该怎样理解always呢?我是自学的,希望您能详细讲一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式