⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vhdl.txt

📁 此代码可产生正弦波、三角波、正斜率拨、负斜率波波、矩形波五种波形
💻 TXT
字号:
/*端口信号说明:
  clk      输入时钟信号
  reset    复位信号,低电平有效
  din      按键输入信号
  d        波形的离散值输出*/
module wave(clk,reset,din,d);
input clk,reset,din;
output [7:0] d;
reg [7:0] d;
//中间变量寄存器
reg [7:0] c,sel;
reg [2:0] tmp;
reg a,up;
reg[1:0] state,next_s;

/*****按键消除抖动部分**********************************/
parameter s0=2'b00,s1=2'b01,s2=2'b11,s3=2'b10;

always@(posedge clk)  //定义起始状态进程
  begin
    if(reset==0)
       state=s0;
    else
       state=next_s;
  end
always@(state or next_s or din)  //状态转换进程
  begin
    case(state)
      s0:  begin
             up=1'b0;
             if(din==0)  next_s=s0;
             else        next_s=s1;
           end
      s1:  begin
             up=1'b0;
             if(din==0)  next_s=s0;
             else        next_s=s2;
           end
      s2:  begin
             up=1'b0;
             if(din==0)  next_s=s0;
             else        next_s=s3;
           end
      s3:  begin
             up=1'b1;
             if(din==1)  next_s=s3;
             else        next_s=s0;
           end
      default: next_s=s0;
    endcase
  end

/*****波形发生部分****************************************/ 

always @(posedge up)    //波形选择计数器(一位独热码计数)
  begin
    if(reset==0)
      tmp<=3'd0;
    else
      begin             //模5循环相加
        if(tmp==3'd5)  tmp<=3'd1;  
        else        tmp<=tmp+3'd1;
      end           
  end

always @(posedge clk)    //波形选择进程
  begin
    case(tmp)
            3'd1: begin  //正斜率波
                    if(d==8'b11111111)  d<=8'b00000000;
                    else  d<=d+1'd1;
                  end
            3'd2: begin  //负斜率波
                    if(d==8'b00000000)  d<=8'b11111111;
                    else  d<=d-1'd1;
                  end
            3'd3: begin  //三角波
                    if(a==0)
                      begin
                        if(d==8'b11111110)
                          begin
                            d<=8'b11111111;
                            a<=1'd1;
                          end
                         else  d<=d+1'd1;
                       end
                     else
                       begin
                         if(d==8'b00000001)
                            begin
                              d<=8'b00000000;
                              a<=1'd0;
                            end
                          else
                            d<=d-1'd1;
                        end
                    end
              3'd4: begin   //矩形波
                      if(c==8'b11111111)  c<=8'b00000000;
                      else if(c>8'b01111111)
                        begin
                          c<=c+1'd1;
                          d<=8'b11111111;
                        end
                      else  
                        begin
                          c<=c+1'd1;
                          d<=8'b00000000;
                        end
                    end
              3'd5: begin   //正弦波
                      if(sel==99)  sel<=8'd0;
                      else  sel<=sel+1'd1;
                      case(sel)
                        8'd0: d<=8'b10000000;
                        8'd1: d<=8'b10001000;
                        8'd2: d<=8'b10001000;
                        8'd3: d<=8'b10100000;
                        8'd4: d<=8'b10101000;
                        8'd5: d<=8'b10101111;
                        8'd6: d<=8'b10110110;
                        8'd7: d<=8'b10111110;
                        8'd8: d<=8'b11000100;
                        8'd9: d<=8'b11001011;
                       8'd10: d<=8'b11010001;
                       8'd11: d<=8'b11010111;
                       8'd12: d<=8'b11100001;
                       8'd13: d<=8'b11100111;
                       8'd14: d<=8'b11101011;
                       8'd15: d<=8'b11101111;
                       8'd16: d<=8'b11110011;
                       8'd17: d<=8'b11110110;
                       8'd18: d<=8'b11111000;
                       8'd19: d<=8'b11111010;
                       8'd20: d<=8'b11111011;
                       8'd21: d<=8'b11111101;
                       8'd22: d<=8'b11111110;
                       8'd23: d<=8'b11111111;
                       8'd24: d<=8'b11111111;
                       8'd25: d<=8'b11111110;
                       8'd26: d<=8'b11111101;
                       8'd27: d<=8'b11111011;
                       8'd28: d<=8'b11111010;
                       8'd29: d<=8'b11111000;
                       8'd30: d<=8'b11110110;
                       8'd31: d<=8'b11110011;
                       8'd32: d<=8'b11101111;
                       8'd33: d<=8'b11101011;
                       8'd34: d<=8'b11100111;
                       8'd35: d<=8'b11100001;
                       8'd36: d<=8'b11010111;
                       8'd37: d<=8'b11010001;
                       8'd38: d<=8'b11001011;
                       8'd39: d<=8'b11000100;
                       8'd40: d<=8'b10111110;
                       8'd41: d<=8'b10110110;
                       8'd42: d<=8'b10101111;
                       8'd43: d<=8'b10101000;
                       8'd44: d<=8'b10100000;
                       8'd45: d<=8'b10100000;
                       8'd46: d<=8'b10011000;
                       8'd47: d<=8'b10010000;
                       8'd48: d<=8'b10001000;
                       8'd49: d<=8'b10000000;
                       8'd50: d<=8'b10000000;
                       8'd51: d<=8'b10000000;
                       8'd52: d<=8'b01111000;
                       8'd53: d<=8'b01110000;
                       8'd54: d<=8'b01101000;
                       8'd55: d<=8'b01100000;
                       8'd56: d<=8'b01011000;
                       8'd57: d<=8'b01010001;
                       8'd58: d<=8'b01001010;
                       8'd59: d<=8'b01000100;
                       8'd60: d<=8'b00111000;
                       8'd61: d<=8'b00110101;
                       8'd62: d<=8'b00101111;
                       8'd63: d<=8'b00101001;
                       8'd64: d<=8'b00011111;
                       8'd65: d<=8'b00011001;
                       8'd66: d<=8'b00010101;
                       8'd67: d<=8'b00010001;
                       8'd68: d<=8'b00001101;
                       8'd69: d<=8'b00001010;
                       8'd70: d<=8'b00000110;
                       8'd71: d<=8'b00000101;
                       8'd72: d<=8'b00000010;
                       8'd73: d<=8'b00000001;
                       8'd74: d<=8'b00000000;
                       8'd75: d<=8'b00000000;
                       8'd76: d<=8'b00000001;
                       8'd77: d<=8'b00000010;
                       8'd78: d<=8'b00000101;
                       8'd79: d<=8'b00000110;
                       8'd80: d<=8'b00001000;
                       8'd81: d<=8'b00001010;
                       8'd82: d<=8'b00001101;
                       8'd83: d<=8'b00010001;
                       8'd84: d<=8'b00010101;
                       8'd85: d<=8'b00011001;
                       8'd86: d<=8'b00011111;
                       8'd87: d<=8'b00101001;
                       8'd88: d<=8'b00101111;
                       8'd89: d<=8'b00110101;
                       8'd90: d<=8'b00111000;
                       8'd91: d<=8'b01000100;
                       8'd92: d<=8'b01001010;
                       8'd93: d<=8'b01010001;
                       8'd94: d<=8'b01011000;
                       8'd95: d<=8'b01100000;
                       8'd96: d<=8'b01101000;
                       8'd97: d<=8'b01110000;
                       8'd98: d<=8'b01111000;
                       8'd99: d<=8'b10000000;
                       default:d<=8'b00000000;
                     endcase
                   end
       default:d<=8'b00000000;
    endcase
  end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -