Basys3播放《生日快乐》时输出仿真值为X而非1的问题求助
Basys3播放生日歌仿真异常问题
我在使用Basys3开发板播放《生日快乐》乐曲时,仿真发现输出值为X而非预期的1。涉及clk_440、sound、sound_tb三个信号的输出,观察到clk_440存在该异常,但r_clk_440正常;单独对时钟模块(a_clk)仿真时结果正常,因此推测问题出在main模块,但尚未定位到具体原因。
以下是仿真所用的各模块及测试代码:
顶层模块(main)
module main( input clk, output sound ); parameter BEAT=400_000; reg [4:0]note_num=0; reg en_a=0; reg [25:0]timer=0; reg r_sound=0; assign sound=r_sound; a_clk a_sound(.clk(clk), .en(en_a), .clk_440(sound)); always@(posedge clk) begin case (note_num) 5'd0: begin if (timer==BEAT/2) begin timer<=0; en_a<=0; note_num<=5'd1; end else begin en_a<=1; timer<=timer+1; note_num<=5'd0; end end endcase end endmodule
a_clk模块
module a_clk( input clk, input en, output clk_440 ); reg [16:0]counter=0; reg r_clk_440=0; assign clk_440=r_clk_440; always@(posedge clk) begin if (en) begin if (counter==113_636) begin counter<=0; r_clk_440<=~r_clk_440; end else counter<= counter +1; end else counter<=0; end endmodule
Image1所用测试平台(TestBench)
module simulation( ); reg clk_tb=0; wire tb_sound; main main_tb(.clk(clk_tb), .sound(sound_tb)); always #5 clk_tb<=~clk_tb; endmodule
Image2所用测试平台(TestBench)
module simulation( ); reg clk_tb=0, en_tb=0; wire clk_440_tb; a_clk a_clk_tb(clk_tb, en_tb, clk_440_tb); always #5 clk_tb<=~clk_tb; initial begin #20; en_tb<=1; end endmodule
内容的提问来源于stack exchange,提问作者Ilan Mermelstein
相关产品推荐
相关产品推荐

