2013-03-31 3 views
1

나는 Verilog에서 링 카운터를 사용하여 병렬 직렬 변환기를 만들고 있습니다. 링 카운터가 제대로 작동하지만 병렬 변환기가 제대로 작동하지 않고 x 정의되지 않은 결과가 표시됩니다. 나는 친절하게 문제를 찾는 데 도움이되는 코드를 제공하고있다.병렬 HDL 직렬

TOP

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

enter image description here

답변

0

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 
나는 당신이보고있는 주요 문제가 parToser의 일부라고 생각합니다.

주소가 input [3:0] myout;reg [2:0]i;이지만 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