📄 irda.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 + -