verilog中case语句执行不正常
最近在学习verilog,使用是XILINX的XC3S50AN,在测试过程中遇到一个低级问题,case语句没有按照预期输出结果。目的通过对CLK分频,控制LED闪烁。同时使用了if语句和case语句做对比。目前if语句可以正常驱动LED闪烁,case语句控制的LED不闪烁。请大家指点一下语法哪里不对。
代码如下:
代码如下:
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 17:38:58 02/24/2016
// Design Name:
// Module Name: case_test
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module case_test(CLK,LED
);
input CLK;
output reg LED;
reg count;
reg list;
reg j;
reg i;
always @ (posedge CLK)
begin
if(j==4'd0)
begin
j<=j+1'b1;
end
else if(j==4'd1)
begin
j<=j+1'b1;
end
else if(j==4'd2)
begin
j<=j+1'b1;
end
else if (j==4'd3)
begin
j<=4'd0;
if(count==24'd1000000)
begin
LED<=~LED;
count<=24'd0;
end
else
count<=count+1'b1;
end
else
j<=4'd0;
end
///////////////////////////////////////////////////
always @(posedge CLK)
case(i)
4'd0:
i<=i+1'd1;
4'd1:
i<=i+1'd1;
4'd2:
i<=i+1'd1;
4'd3:
begin
i<=4'd0;
if(list==24'd1000000)
begin
LED<=~LED;
list<=24'd0;
end
else
list<=list+1'd1;
end
endcase
endmodule
你的复位信号呢? 用modelsim仿真一下,看下波形,再找问题在哪里 辰星和月 发表于 2016-2-25 09:06
你的复位信号呢?
加上复位信号,运行就正常了
增加的语句如下:
always @(posedge CLK or negedge RSTn)
if(!RSTn)
begin
i<=4'd0;
list<=24'd0;
end
是不是always语句必须要增加复位信号?
在case里面加上default试试:
default: i <= 0;
应该是复位的问题; longsky1985 发表于 2016-2-25 09:44
加上复位信号,运行就正常了
增加的语句如下:
always @(posedge CLK or negedge RSTn)
复位信号在硬件设计里面是必须的。不信你自己翻翻数电书。 不要复位信号也可以。加一个 default就可以了。 要有一个初始状态啊 初始状态未指定,你增加的复位语句根本目的也是提供一个初始状态 谢谢大家的指点,解决了我的疑惑。 reg变量默认值为x 不定;
wire变量默认值为z 高阻。 这就是verilog和c语言开发的区别
页:
[1]