| 
 | 
 
 本帖最后由 hyp7617 于 2011-4-16 19:48 编辑  
 
拜托了,各位高手 
 
基本步骤我知道 
 
三是在后面时钟、什么引脚设置的时候就不知所措了 
 
谢谢各位高手了 
 
我做毕业设计,需要仿真截图 
 
QQ 992501270 
 
是VerilogHDL语言的程序,已通过。- module median(clk,reset,load,din,mult,dout,over,a3,b3,c3,a2,b2,c2,a1,b1,c1);  
 
  
- input  clk;
 
 - input  reset;
 
 - input  load;       //load是控制信号,load为高,接收cpu提供的数据
 
 - input  [7:0]din;
 
 - input  [2:0]mult;  //信号放大的倍数
 
 - output [7:0]dout;
 
 - output over;      //当处理完一个点时产生一个时钟周期宽度的信号。
 
 - reg   over;
 
 - output [7:0]a1,a2,a3,b1,b2,b3,c1,c2,c3;
 
 - reg   [3:0]state;
 
 - reg   [3:0]cur_state;
 
  
- reg    [10:0]img_x;
 
 - reg    [1:0]img_y;
 
 - reg    [10:0]pix;
 
 - reg    [10:0]piy;
 
 - reg    we0,we1,we2;
 
 - reg    run_edge;
 
 - reg    [10:0]addr;
 
 - reg    [7:0]wrdata;
 
 - wire   [7:0]rddata0,rddata1,rddata2;
 
  
 
- reg    [7:0]a_max,a_mid,a_min,b_max,b_mid,b_min,c_max,c_mid,c_min;
 
 - reg    [7:0]max,mid,min,mid_mid,mid_max,mid_min;
 
 - reg    [7:0]q_max,q_mid,q_min;
 
 - reg    [7:0]d0,d1,d2,d3;
 
 - reg    sum0,sum1,sum2,sum3;
 
 - reg    [2:0]sum;
 
 - reg    [9:0]temp0;
 
 - reg    [7:0]temp;
 
 - reg    [7:0]a1,a2,a3,b1,b2,b3,c1,c2,c3;
 
 - reg    en;
 
  
- parameter s0 = 4'd0,
 
 -           s1 = 4'd1,
 
 -           s2 = 4'd2,
 
 -           s3 = 4'd3, 
 
 -                   s4 = 4'd4,
 
 -                   s5 = 4'd5,
 
 -                   s6 = 4'd6 ,
 
 -                   s7 = 4'd7,
 
 -                   s8 = 4'd8, 
 
 -                   s9 = 4'd9,
 
 -                   s10 = 4'd10,
 
 -                   s11 = 4'd11,
 
 -                   s12 = 4'd12,
 
 -                   s13 = 4'd13,
 
 -                   s14 = 4'd14,
 
 -                   s15 = 4'd15;
 
  
- assign  dout = temp;
 
  
- always @(posedge clk or negedge reset)
 
 - begin
 
 -     if (reset == 0)
 
 -     begin 
 
 -         en <= 1;
 
 -         over <= 1'b0;
 
 -         img_x <= 11'd0;
 
 -         img_y <= 2'd0;
 
 -         we0 <= 1'b0;
 
 -         we1 <= 1'b0;
 
 -         we2 <= 1'b0;
 
 -         pix <= 11'd0;
 
 -         piy <= 2'd0;
 
 -         run_edge <= 1'b0;
 
 -         state <= s0;
 
 -         cur_state <= s0;
 
 -     end 
 
 -     else 
 
 -     begin
 
 -         if (load & en) 
 
 -         begin
 
 -             case (state)
 
 -             s0:begin
 
 -                    if(img_x < 11'd1728)  
 
 -                    begin
 
 -                        addr <= img_x;
 
 -                        state <= s0; 
 
 -                        wrdata <= din;
 
 -                        img_x <= img_x + 11'd1;
 
 -                        if (img_y == 0)
 
 -                            we0 = 1;
 
 -                        else  if(img_y == 1)
 
 -                            we1 = 1'b1;
 
 -                        else 
 
 -                            we2 = 1'b1;    
 
 -                    end 
 
 -                    else 
 
 -                    begin 
 
 -                        state <=s1;
 
 -                        img_x <= 11'd0;
 
 -                        we0 <= 1'b0;
 
 -                        we1 <= 1'b0;
 
 -                        we2 <= 1'b0;
 
 -                    end
 
 -                end 
 
 -             s1:begin
 
 -                    addr <= pix;
 
 -                    pix <= pix + 11'd1; 
 
 -                    en <= 0;
 
 -                    run_edge <= 1'b1;
 
 -                    if (piy == 2'd0)
 
 -                      begin 
 
 -                        cur_state <= s0;
 
 -                        a3 <= rddata0;
 
 -                        b3 <= rddata1;
 
 -                        c3 <= rddata2;
 
 -                      end 
 
 -                    else if (piy == 2'd1)
 
 -                      begin 
 
 -                        cur_state <= s1;
 
 -                        a3 <= rddata2;
 
 -                        b3 <= rddata0;
 
 -                        c3 <= rddata1;
 
 -                      end 
 
 -                    else 
 
 -                      begin 
 
 -                        cur_state <= s2;
 
 -                        a3 <= rddata1;
 
 -                        b3 <= rddata2;
 
 -                        c3 <= rddata0;
 
 -                      end 
 
 -                end    
 
 -             endcase 
 
 -         end 
 
 -         else if (run_edge & !load)
 
 -         begin 
 
 -             case (cur_state) 
 
 -             s0:begin
 
 -                    piy = 2'd0;
 
 -                    a1 <= a2;
 
 -                    b1 <= b2;
 
 -                    c1 <= c2;
 
 -                    a2 <= a3;
 
 -                    b2 <= b3;
 
 -                    c2 <= c3;
 
 -                    a3 <= rddata0;
 
 -                    b3 <= rddata1;
 
 -                    c3 <= rddata2;
 
 -                    cur_state <= s3;
 
 -                end 
 
 -             s1:begin
 
 -                    piy = 2'd1;
 
 -                    a1 <= a2;
 
 -                    b1 <= b2;
 
 -                    c1 <= c2;
 
 -                    a2 <= a3;
 
 -                    b2 <= b3;
 
 -                    c2 <= c3;
 
 -                    a3 <= rddata2;
 
 -                    b3 <= rddata0;
 
 -                    c3 <= rddata1;
 
 -                    cur_state <= s3;
 
 -                end 
 
 -             s2:begin
 
 -                    piy <= 2'd2; 
 
 -                    a1 <= a2;
 
 -                    b1 <= b2;
 
 -                    c1 <= c2;
 
 -                    a2 <= a3;
 
 -                    b2 <= b3;
 
 -                    c2 <= c3;
 
 -                    a3 <= rddata1;
 
 -                    b3 <= rddata2;
 
 -                    c3 <= rddata0;
 
 -                    cur_state<= s3;
 
 -                 end 
 
 -             s3:begin
 
 -                    d0 <= (b2 > a2 ) ? (b2 - a2)  : (a2 - b2);
 
 -                    d1 <= (b2 > b1 ) ? (b2 - b1)  : (b1 - b2);
 
 -                    d2 <= (b2 > b3 ) ? (b2 - b3)  : (b3 - b2);
 
 -                    d3 <= (b2 > c2 ) ? (b2 - c2)  : (c2 - b2);
 
 -                    cur_state <= s4;
 
 -                 end 
 
 -             s4:begin 
 
 -                    sum0 <= (d0 > 4) ?  1'b0 : 1'b1;
 
 -                    sum1 <= (d1 > 4) ?  1'b0 : 1'b1;
 
 -                    sum2 <= (d2 > 4) ?  1'b0 : 1'b1;
 
 -                    sum3 <= (d3 > 4) ?  1'b0 : 1'b1;
 
 -                    cur_state <= s5;
 
 -                end 
 
 -             s5:begin 
 
 -                    sum <= (sum0 + sum1) + (sum2 + sum3);
 
 -                    cur_state <= s6;
 
 -                end 
 
 -             s6:begin 
 
 -                    if ( (sum > 3'd1) && (sum < 3'd4) )
 
 -                    begin 
 
 -                        //edge_out = 0;  //low edge ,and not to disposal 
 
 -                        cur_state <= s13;
 
 -                        q_mid <= b2;
 
 -                    end 
 
 -                    else 
 
 -                       //edge_out = 1;     //high  need to median
 
 -                       cur_state <= s7;
 
 -                end 
 
 -             s7:begin 
 
 -                    if (a1>a2)
 
 -                    begin 
 
 -                        a_max<=a1;
 
 -                        a_min<=a2;
 
 -                    end 
 
 -                    else 
 
 -                    begin
 
 -                        a_max<=a2;
 
 -                        a_min<=a1; 
 
 -                    end      
 
 -                    if (b1 > b2)   
 
 -                    begin
 
 -                        b_max<=b1;
 
 -                        b_min<=b2; 
 
 -                    end 
 
 -                    else 
 
 -                    begin
 
 -                        b_max<=b2;
 
 -                        b_min<=b1; 
 
 -                    end    
 
 -                    if(c1>c2)    
 
 -                    begin
 
 -                        c_max<=c1;
 
 -                        c_min<=c2; 
 
 -                    end 
 
 -                    else 
 
 -                    begin
 
 -                        c_max<=c2;
 
 -                        c_min<=c1; 
 
 -                    end   
 
 -                    cur_state<=s8;
 
 -                end 
 
 -             s8:begin 
 
 -                    if (a3>a_max)
 
 -                    begin         
 
 -                        a_max<=a3;
 
 -                        a_mid<=a_max;
 
 -                        a_min<=a_min;
 
 -                    end 
 
 -                    else 
 
 -                    begin
 
 -                        if (a3>a_min)      
 
 -                        begin 
 
 -                            a_max<=a_max;
 
 -                            a_mid<=a3;
 
 -                            a_min<=a_min;
 
 -                        end 
 
 -                        else 
 
 -                        begin 
 
 -                            a_max<=a_max;
 
 -                            a_mid<=a_min;
 
 -                            a_min<=a3;
 
 -                        end  
 
 -                    end 
 
 -                    if (b3>b_max)
 
 -                    begin         
 
 -                        b_max<=b3;
 
 -                        b_mid<=b_max;
 
 -                        b_min<=b_min;
 
 -                    end 
 
 -                    else 
 
 -                    begin
 
 -                        if(b3>b_min)      
 
 -                        begin 
 
 -                            b_max<=b_max;
 
 -                            b_mid<=b3;
 
 -                            b_min<=b_min;
 
 -                        end 
 
 -                        else 
 
 -                        begin 
 
 -                            b_max<=b_max;
 
 -                            b_mid<=b_min;
 
 -                            b_min<=b3;
 
 -                        end  
 
 -                     end 
 
 -                    if(c3>c_max)
 
 -                    begin         
 
 -                        c_max<=c3;
 
 -                        c_mid<=c_max;
 
 -                        c_min<=c_min;
 
 -                    end 
 
 -                    else 
 
 -                    begin
 
 -                        if(c3>c_min)      
 
 -                        begin 
 
 -                            c_max<=c_max;
 
 -                            c_mid<=c3;
 
 -                            c_min<=c_min;
 
 -                        end 
 
 -                        else 
 
 -                        begin 
 
 -                            c_max<=c_max;
 
 -                            c_mid<=c_min;
 
 -                            c_min<=c3;
 
 -                        end  
 
 -                     end   
 
 -                    cur_state<=s9;
 
 -                end                    
 
 -             s9:begin
 
 -                    if (a_max>b_max) 
 
 -                        max<=b_max;
 
 -                    else 
 
 -                        max<=a_max;
 
 -                    if (a_mid>b_mid)
 
 -                    begin 
 
 -                        mid_max<=a_mid;
 
 -                        mid_min<=b_mid;
 
 -                    end     
 
 -                    else 
 
 -                    begin 
 
 -                        mid_max<=b_mid;
 
 -                        mid_min<=a_mid;
 
 -                    end 
 
 -                    if (a_min>b_min)    
 
 -                        min<=a_min;
 
 -                    else 
 
 -                        min<=b_min;
 
 -                    cur_state<=s10;        
 
 -                 end 
 
 -             s10:begin 
 
 -                     if (c_mid > mid_max) 
 
 -                         mid<=mid_max;
 
 -                     else 
 
 -                     begin 
 
 -                     if (c_mid<mid_min)      
 
 -                         mid<=mid_min;
 
 -                     else 
 
 -                         mid<=c_mid;
 
 -                     end
 
 -                     if (c_max>max)   
 
 -                         max<=max;
 
 -                     else 
 
 -                         max<=c_max;
 
 -                     if (c_min>min)    
 
 -                         min<=c_min;
 
 -                     else 
 
 -                         min<=min;  
 
 -                     cur_state<=s11;    
 
 -                 end             
 
 -             s11:begin
 
 -                     if (max>mid) 
 
 -                     begin
 
 -                         q_max<=max;
 
 -                         q_min<=mid; 
 
 -                     end 
 
 -                     else 
 
 -                     begin 
 
 -                         q_max<=mid;
 
 -                         q_min<=max;
 
 -                     end 
 
 -                     cur_state<=s12;   
 
 -                 end     
 
 -             s12:begin 
 
 -                     if (min>q_max)
 
 -                        q_mid<=q_max;
 
 -                     else 
 
 -                     begin 
 
 -                         if (min<q_min)  
 
 -                             q_mid<=q_min;
 
 -                         else 
 
 -                            q_mid<=min;   //q_mid is the mid which to replace the initial number 
 
 -                     end 
 
 -                     cur_state <= s13;
 
 -                 end 
 
 -             s13:begin 
 
 -                     temp0 <= q_mid * mult;
 
 -                     cur_state <= s14;
 
 -                 end 
 
 -             s14:begin 
 
 -                     over <= 1;
 
 -                     if (temp0 > 8'd255)
 
 -                         temp <= 8'd255;
 
 -                     else 
 
 -                         temp <= temp0[7:0];
 
 -                     cur_state <= s15;
 
 -                 end 
 
 -             s15:begin
 
 -                     over <= 0;
 
 -                     if (pix == 11'd1728) 
 
 -                     begin
 
 -                         run_edge <= 0;
 
 -                         state <= s0;
 
 -                         en <=1;
 
 -                         pix <= 0;  
 
 -                         if (piy == 0)
 
 -                             piy = 2'd1;
 
 -                         else if (piy == 1)    
 
 -                             piy = 2'd2;
 
 -                         else 
 
 -                             piy = 2'd0;    
 
 -                         
 
 -                         if (img_y == 0)
 
 -                             img_y = 1;
 
 -                         else if (img_y == 1)    
 
 -                             img_y = 2;
 
 -                         else 
 
 -                             img_y =0;    
 
 -                     end 
 
 -                     else 
 
 -                     begin
 
 -                         pix <= pix + 2'd1;
 
 -                         if (piy == 2'd0) 
 
 -                             cur_state <= s0;
 
 -                         else if (piy == 2'd1)
 
 -                             cur_state <= 2'd1;
 
 -                         else 
 
 -                             cur_state <= 2'd2;
 
 -                         addr <= pix;
 
 -                     end 
 
 -                 end 
 
 -             endcase  
 
 -         end     
 
 -     end
 
 - end 
 
 -  ram  r1(clk,we0,addr,wrdata,rddata0);
 
 -  ram  r2(clk,we1,addr,wrdata,rddata1);
 
 -  ram  r3(clk,we2,addr,wrdata,rddata2);
 
 - endmodule 
 
  
- module ram(clk,we,addr,wrdata,rddata);
 
  
- output  [7:0] rddata;
 
 - input [10:0] addr;
 
 - input [7:0] wrdata;
 
 - input we, clk;
 
 - reg [10:0] addr_reg;
 
  
- reg [7:0] mem [1727:0];
 
 -         always @ (posedge clk) 
 
 -         begin
 
 -                 if (we) mem[addr] <= wrdata;
 
 -                 addr_reg <= addr;
 
 -         end
 
 -         assign rddata = mem[addr_reg];
 
 -         
 
 - endmodule 
 
  复制代码 |   
 
 
 
 |