我是一个并行的串行转换器使用环计数器在verilog。环计数器工作良好,但并行串行转换器工作不正常,我正在得到x未定的结果。我正在提供代码,请帮助我发现问题。
顶
module PtoSTOP;
reg clk,rst;
wire [3:0] myout;
wire out;
Ring a(clk,rst,myout);
parToser x(myout,clk,rst,out);
initial begin
clk=1;
rst=1;
#1 rst=0;
end
always
#2 clk=~clk;
endmodule并行串行转换器
module parToser(myout,clk,rst,out);
input clk,rst;
input [3:0] myout;
output reg out;
reg [2:0]i;
always @(posedge clk or posedge rst) begin
if(rst) begin
out <= 0;
i <= 0;
end
else begin
out <= myout[i];
i <= i+1;
end
end
endmodule RingCounter
module Ring(clk,rst,myout);
input clk,rst;
output reg [3:0]myout;
always @(posedge clk or posedge rst) begin
if(rst)
myout<=1;
else
myout<=myout<<1;
end
endmodule

发布于 2013-03-31 17:19:53
我认为你看到的主要问题是parToser的一部分。
您有reg [2:0]i;,您可以增加它并使用它来寻址input [3:0] myout;,但是我可以保存0到7的值,其中一半在地址范围3:0 myout之外。您应该看到一个关于超出范围寻址的模拟错误。
此外,您还包括了一些带有重置条件的触发器,但没有将重置添加到“parToser”和“环行”中的灵敏度列表中:
always @(posedge clk) 应:
always @(posedge clk or posedge rst)有了这个触发器,I和myout变量将是x,因为它们还没有被设置为已知的条件。
注: parToser i = i+1;应该是i <= i+1;
https://stackoverflow.com/questions/15731357
复制相似问题