2013-03-31 3 views
1

Я делаю параллельный последовательный преобразователь, используя кольцевой счетчик в verilog. Счетчик звонков работает нормально, но параллельный последовательный преобразователь работает неправильно, и я получаю x undefined result. Я предоставляю код, любезно помогаю мне найти проблему.Parallel To Serial HDL

ТОП

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 

enter image description here

ответ

0

Я думаю, что главная проблема, которую Вы видите, является частью 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, так как они не были установлены в известное условие.

NB: parToser i = i+1; должен быть i <= i+1;

+0

я все еще получаю тот же результат – Naruto

+0

код одинаковые – Naruto

+0

Вопросы могут быть в стадии разработки, так как люди при условии, ответы, которые они ожидают, что вопросы, которые будут обновлены, чтобы удалить несвязанные ошибки. Если вопросы не обновляются, чтобы удалить более видимые, но несвязанные ошибки, вы, вероятно, получите много ответов о более простых проблемах. В любом случае возникла небольшая проблема с вашей адресацией результата. – Morgan