写了一个简易电子琴verilog hdl 代码在QuartusⅡ上编译通过 还写了testbench,但在modelsim上输出却为红线
代码为moduledianziqin(clk,key,buzzout);//模块名称dianziqininputclk;//系统时钟50MHZinput[3:0]key;...
代码为
module dianziqin(clk,key,buzzout);//模块名称dianziqin
input clk; //系统时钟50 MHZ
input[3:0]key; //按键输入
output buzzout; //蜂鸣器输出
reg buzzout_reg;
reg[3:0]key_reg;
reg[22:0]counter,count_end; //定义寄存器
reg key_flg;
initial key_flg = 1'b0;
always@(posedge clk)
begin
counter = counter + 1;//计数器加1
if(counter==count_end)
begin
counter = 0; //计数器清零
if(key_flg==1'b1)
buzzout_reg = ~buzzout_reg;
else buzzout_reg = 1'b0;
end
end
always@(counter[10:9])
begin
key_reg = key;
if(key_reg!=4'b1111)key_flg = 1'b1;
else key_flg = 1'b0;
case(key_reg)
4'b1110: count_end=20'd47774; //中音DO的分频系数
4'b1101: count_end=20'd42568; //中音RE的分频系数
4'b1010: count_end=20'd37919; //中音MI的分频系数
4'b1001: count_end=20'd35791; //中音FA的分频系数
4'b0110: count_end=20'd31888; //中音SOL的分频系数
4'b0101: count_end=20'd28409; //中音LA的分频系数
4'b0010: count_end=20'd25309; //中音SI的分频系数
4'b0001: count_end=20'd23912; //高音DO的分频系数
default: count_end=20'hfffff;
endcase
end
assign buzzout = buzzout_reg;
//assign led = ~key_reg;//输出按键状态
endmodule
带代码表示用4个按键实现中音的do re mi fa sol la si 和高音的do
下面为测试脚本
`timescale 1ns/1 ps
module dianziqin_vlg_tst();
reg clk;
reg [3:0] key;
wire buzzout;
dianziqin i1 (
.buzzout(buzzout),
.clk(clk),
.key(key)
);
initial begin
clk = 0;
forever
#10 clk =~clk;
end
initial begin
key = 4'b1110;
#1000;
$stop;
end
在modelsim-altera上仿真 输入都对 但输出为红线 下面是波形截图 展开
module dianziqin(clk,key,buzzout);//模块名称dianziqin
input clk; //系统时钟50 MHZ
input[3:0]key; //按键输入
output buzzout; //蜂鸣器输出
reg buzzout_reg;
reg[3:0]key_reg;
reg[22:0]counter,count_end; //定义寄存器
reg key_flg;
initial key_flg = 1'b0;
always@(posedge clk)
begin
counter = counter + 1;//计数器加1
if(counter==count_end)
begin
counter = 0; //计数器清零
if(key_flg==1'b1)
buzzout_reg = ~buzzout_reg;
else buzzout_reg = 1'b0;
end
end
always@(counter[10:9])
begin
key_reg = key;
if(key_reg!=4'b1111)key_flg = 1'b1;
else key_flg = 1'b0;
case(key_reg)
4'b1110: count_end=20'd47774; //中音DO的分频系数
4'b1101: count_end=20'd42568; //中音RE的分频系数
4'b1010: count_end=20'd37919; //中音MI的分频系数
4'b1001: count_end=20'd35791; //中音FA的分频系数
4'b0110: count_end=20'd31888; //中音SOL的分频系数
4'b0101: count_end=20'd28409; //中音LA的分频系数
4'b0010: count_end=20'd25309; //中音SI的分频系数
4'b0001: count_end=20'd23912; //高音DO的分频系数
default: count_end=20'hfffff;
endcase
end
assign buzzout = buzzout_reg;
//assign led = ~key_reg;//输出按键状态
endmodule
带代码表示用4个按键实现中音的do re mi fa sol la si 和高音的do
下面为测试脚本
`timescale 1ns/1 ps
module dianziqin_vlg_tst();
reg clk;
reg [3:0] key;
wire buzzout;
dianziqin i1 (
.buzzout(buzzout),
.clk(clk),
.key(key)
);
initial begin
clk = 0;
forever
#10 clk =~clk;
end
initial begin
key = 4'b1110;
#1000;
$stop;
end
在modelsim-altera上仿真 输入都对 但输出为红线 下面是波形截图 展开
4个回答
展开全部
在quartus ii上没问题不代表在modelsim上也没问题
在modelsim上,模块dianziqin里的所有reg型的变量都需要被赋初值!!如果没有赋初值输出会为红色波形!
我这个问题纠结了两个下午呢!
在modelsim上,模块dianziqin里的所有reg型的变量都需要被赋初值!!如果没有赋初值输出会为红色波形!
我这个问题纠结了两个下午呢!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
vsim 命令中加上 -novopt 参数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在检查一遍吧,或许是出了什么问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询