ANG 发表于 2010-6-28 09:11:35

测试程序,不需要综合!

ups 发表于 2010-6-28 10:07:22

Harva 程序我拿去改了<br>
加了个计数器,仿真不好使了<br>
又找不到毛病<br>
高手进来帮帮忙<br>
module serial2pal(clk,reset,enable,data_in,data_head,odd_bits,even_bits,data_out);<br>
<br>
input clk;<br>
input reset;<br>
<br>
input enable;<br>
input data_in;<br>
input data_head;<br>
<br>
output odd_bits;<br>
output even_bits;<br>
output data_out;<br>
reg count;<br>
<br>
reg data_out;<br>
<br>
reg set;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br>
reg check_head;&nbsp; &nbsp;<br>
<br>
always@(posedge clk or negedge reset)<br>
begin<br>
&nbsp; &nbsp;&nbsp;&nbsp;if(!reset)<br>
&nbsp; &nbsp;&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;count&lt;=0;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;set&lt;=0;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;check_head&lt;=0;<br>
&nbsp; &nbsp;&nbsp;&nbsp;end<br>
&nbsp; &nbsp;&nbsp;&nbsp;else if(enable==1)<br>
&nbsp; &nbsp;&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;check_head&lt;={check_head,data_in};<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if(check_head==data_head)<br>
&nbsp; &nbsp;begin&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; set&lt;=1;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;count&lt;=4'b0111;<br>
end<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else <br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;set&lt;=0;<br>
&nbsp; &nbsp; end<br>
end<br>
<br>
always@(posedge clk or negedge reset)<br>
begin<br>
&nbsp; &nbsp; if(!reset)<br>
&nbsp; &nbsp;&nbsp; &nbsp; data_out&lt;=0;<br>
&nbsp; &nbsp; else if(enable==0)<br>
&nbsp; &nbsp;&nbsp; &nbsp; begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if((set&lt;=1)&amp;&amp;(count&gt;=7))<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;data_out&lt;={data_out,data_in};<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; count&lt;=count+1;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;end<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;data_out&lt;=8'bz;<br>
&nbsp; &nbsp;&nbsp; &nbsp; end<br>
end<br>
<br>
assign odd_bits=^data_out;<br>
assign even_bits=~odd_bits;<br>
<br>
endmodule<br>
<br>
[ 本帖最后由 zaochenyu 于 2006-9-6 12:38 编辑 ]

CHAN 发表于 2010-6-28 12:06:53

问题处在你的else if(enable==1)<br>
&nbsp; &nbsp;&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;check_head&lt;={check_head,data_in};<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if(check_head==data_head)<br>
&nbsp; &nbsp;begin&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; set&lt;=1;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;count&lt;=4'b0111;<br>
end<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else <br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;set&lt;=0;<br>
&nbsp; &nbsp; end<br>
中的else语句,由于check_head也是随输入变的,而你有没有积存set的值,也就是说<br>
在你的描述中set只是一个脉冲(宽度可能为1各clk周期),而不是你所希望的一直高电平,<br>
所以,应给去掉else&nbsp;&nbsp;set&lt;=0;语句,对set的值进行锁存。

VVC 发表于 2010-6-28 13:13:10

测试程序,不需要综合!测试程序,不需要综合!测试程序,不需要综合!

wwwwwwasd 发表于 2010-8-24 09:58:30

我觉得应该这样写:
`timescale 1ns / 1ps
module serial2pal(
                  //input
                  clk,            //clock signal
                  reset,            //reset signal
                  enable,         //enable signal
                  data_in,          //serial data in
                  data_head,      //head of the useful data, used for head check
                  data_tail,      //tail of the useful data, used for tail check
                  
                  //output
                  odd_bits,         //indicate the result of odd and even check
                  even_bits,
                  data_out,
                                                check_head,                        //add
                                                check_tail,                        //add
                                                seta                                        //add
                  );
//clock and reset signal description
input clk;
input reset;

//input signal description
input enable;
input data_in;
input data_head;
input data_tail;

//output description
output odd_bits;
output even_bits;
output data_out;
output check_head;             //add
output check_tail;                  //add
output seta;                                                          //add

reg n;
reg data_out;
parameter temp_head=8'b11111111;               //add
parameter temp_tail=8'b00000000;               //add

//internal signal description
reg seta;               //used to indicate whether we have got the data header.
reg check_head;   //used to check the data_head
reg check_tail;   //used to check the end of the useful data

always@(posedge clk or negedge reset)
begin
   if(!reset)
       begin
            seta<=0;
            check_head<=0;
            check_tail<=0;
       end
   else
          begin


                check_head={check_head,data_in};
                check_tail={check_tail,data_in};
                  if(check_head==temp_head)
                                      seta<=1;
                            else if(check_tail==temp_tail)
                                      seta<=0;

          end
end

always@(posedge clk or negedge reset)
begin
    if(!reset)
       data_out<=0;
    else
       begin
                     if(n<=7)
                          begin       //
               if(seta==1)
                                 begin
                  data_out<={data_out,data_in};
                                        n=n+1;
                                      end
               else
                             n=0;
                          end
                          else
                          begin
                               n=0;
                             data_out=8'bx;
                          end
       end
end

//assign odd_bits=^data_out;       
//assign even_bits=~odd_bits;       

endmodule

wwwwwwasd 发表于 2010-8-24 09:59:21

测试部分:
`timescale 1ns / 1ps

module test_v;

        // Inputs
        reg clk;
        reg reset;
        reg enable;
        reg data_in;
        reg data_head;
        reg data_tail;

        // Outputs
        wire odd_bits;
        wire even_bits;
        wire data_out;
        wire check_head;
        wire check_tail;
        wire seta;

   parameter period =40 ;

        // Instantiate the Unit Under Test (UUT)
        serial2pal uut (
                .clk(clk),
                .reset(reset),
                .enable(enable),
                .data_in(data_in),
                .data_head(data_head),
                .data_tail(data_tail),
                .odd_bits(odd_bits),
                .even_bits(even_bits),
                .data_out(data_out),
                .check_head(check_head),
                .check_tail(check_tail),
                .seta(seta)

        );


always #20 clk<=~clk;      
                              
initial
begin
               reset=1;
               data_in=0;
       clk=0;
               enable=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=1;          //1
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;       //0
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=1;       //1
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;
#period   data_in=0;

#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;
#period   data_in=0;
#period   data_in=1;

end        //后加的



      
endmodule
页: 1 [2]
查看完整版本: 求verilog 8位串转并程序和测试程序,要求奇偶校验和数据头探测