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

📄 irda.v

📁 在FPGA上开发红外传输接口
💻 V
字号:
module irda(
    clk,
    rst,
    ir_tx,
    ir_rx,
    led,
    keyin,
    led1
);

input     clk;
input     rst;
input     ir_rx;
input     keyin;
output    ir_tx;
output    led;
output    led1;

reg    [8:0]  cnt;
reg    [23:0] slow_cnt;

reg           tx_carrier;
reg           tx_en;
wire          carry;
wire          s_carry;
reg    [3:0]  pulse_cnt;

always @ (posedge clk or posedge rst)
    if (rst)
       pulse_cnt<=4'b0000;
    else if(s_carry)
       pulse_cnt<=pulse_cnt+1'b1;
    else
       pulse_cnt<=pulse_cnt;


//
always @ (posedge clk or posedge rst)
    if (rst)
        slow_cnt<=24'h000000;
//    else if(slow_cnt==24'h1312d0)
    else if(slow_cnt==24'h098968)
        slow_cnt<=24'h000000;
    else
        slow_cnt<=slow_cnt+1'b1;
assign s_carry=(slow_cnt==24'h098968) ? 1'b1 : 1'b0;
//assign s_carry=(slow_cnt==24'h1312d0) ? 1'b1 : 1'b0;

always @ (posedge clk or posedge rst)
    if (rst)
        tx_en<=1'b0;
    else if(s_carry)
        tx_en<=~tx_en;
    else
        tx_en<=tx_en;

//generate the 40k carrier
assign  carry=(cnt==9'd329) ? 1'b1 : 1'b0;
always @ (posedge clk or posedge rst)
    if (rst)
        cnt<=9'h000;
    else if(carry)
        cnt<=9'h000;
    else
        cnt<=cnt+1'b1;
        
always @ (posedge clk or posedge rst)
    if (rst)
        tx_carrier<=1'b0;
    else if (carry)
        tx_carrier<=~tx_carrier;
    else
        tx_carrier<=tx_carrier;
        
//assign ir_tx=(keyin) ? tx_carrier : 1'b0;
//assign ir_tx=tx_carrier;
assign ir_tx=(tx_en && pulse_cnt[3]) ? tx_carrier : 1'b0;
assign led=keyin;        
assign led1=ir_rx;
endmodule

⌨️ 快捷键说明

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