Modelsim-Altera SE时序仿真,一信号某几位始终处于高阻态
如题,本人用Modelsim-AlteraSE10.1d或者10.1e做时序仿真的时候,在TestBench输出到module的信号始终有几个位处于高阻态,网上找了所谓的...
如题,本人用Modelsim-Altera SE 10.1d或者10.1e做时序仿真的时候,在TestBench输出到module的信号始终有几个位处于高阻态,网上找了所谓的添加库altera_mf和altera_lnsim都没有用,从程序源码来看,也不是初值引起的问题,实在是不知道问题出在哪? 整个程序就是为了验证一个28位/18位的除法器。
求大神指点,下面是源码和仿真截图:
//testbench.v
`timescale 1ns/100psmodule testbench( input clk, output wire [27:0] C, output reg first);reg [27:0] A ;reg [17:0] B ;reg [3:0] cnt ;initialbeginA = 28'D15000;B = 18'd10000;cnt = 4'd0;first = 1'b0;end
always @(posedge clk)begin if(!first) begin first <= 1'b1; A <= 28'D3224000; B <= 18'd10000; end cnt <= cnt + 4'd1; if(cnt == 9) begin A <= A + 28'HFF; B <= B +18'hF; cnt <= 0; endenddiv divd( .clk(clk), .A(A), .B(B), .C(C));endmodule
//div.v
module div( input clk, input [27:0] A, input [17:0] B, output reg [27:0] C);wire [27:0] D;assign D = A / B;always @(posedge clk)begin C <= D;end endmodule
clk为自己添加的输入激励,100MHz,别说是频率太高的原因,因为低到1MHz的频率,我也试过,还是一样,没有任何效果。 展开
求大神指点,下面是源码和仿真截图:
//testbench.v
`timescale 1ns/100psmodule testbench( input clk, output wire [27:0] C, output reg first);reg [27:0] A ;reg [17:0] B ;reg [3:0] cnt ;initialbeginA = 28'D15000;B = 18'd10000;cnt = 4'd0;first = 1'b0;end
always @(posedge clk)begin if(!first) begin first <= 1'b1; A <= 28'D3224000; B <= 18'd10000; end cnt <= cnt + 4'd1; if(cnt == 9) begin A <= A + 28'HFF; B <= B +18'hF; cnt <= 0; endenddiv divd( .clk(clk), .A(A), .B(B), .C(C));endmodule
//div.v
module div( input clk, input [27:0] A, input [17:0] B, output reg [27:0] C);wire [27:0] D;assign D = A / B;always @(posedge clk)begin C <= D;end endmodule
clk为自己添加的输入激励,100MHz,别说是频率太高的原因,因为低到1MHz的频率,我也试过,还是一样,没有任何效果。 展开
1个回答
展开全部
看你写的代码感觉很多语法问题,一般情况下输入端没有被赋予初值在modelsim仿真时就会是高组态,对比A和B,A是高组态,B不是,就噶西安你的testbench代码中给A赋值时,“ ’ ”号后面的的进制数写成大写了,你可以将他们都改成小写试试。你的输出高组态,我觉得是div代码中” output reg [27:0]C; “这句代码有问题,C是输出应该是wire型,而不是寄存器型,说到这里你在testbench代码中也将A和B用成reg型,感觉这样不合理。不知道能不能解决你的问题,但是帮你看看语法,可以再仿真试试,你自己也可以在仿真编译的时候留意下编译栏看有没有报错或者警告。如果还有问题请留言。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询