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

📄 lcm.v

📁 用vhdl语言实现2DPSK数字传输
💻 V
字号:
module LCM(reset,clk_lcd,lock,wave_in,RW,RS,E,wave_out);
input clk_lcd,reset,lock;
input [4:0] wave_in;
output RW,RS,E;
output [7:0] data_out;

reg RW,RS,en;
reg [7:0] data_out;
reg [4:0] wave_int;
reg [1:0] wave_low;
reg [1:0] wave_low1;
wire [7:0] wave_out;
reg [4:0] count;
reg [1:0] alert0;
wire clk0,clk1,alert,clk;
wire reset_count;
reg [3:0] state;

parameter
	warmup=4'b0000,wait_long0=4'b0001,clc=4'b0010,
	wait_long1==4'b0011,function_set=4'b0100,display_set=4'b0101,
	input_set=4'b0110,CGRAM_set=4'b0111,code_address=4'b1000,
	input_set1=4'b1001,DDRAM_set=4'b1010,wave_code=4'b1011;

assign clk1=clk0&&lock;
assign clk=clk1&&alert;
assign clk0=clk_lcd;
assign E=en&&clk;
assign reset_count=(state==warmup)||(state==clc)||(state==CGRAM_set);


always @(posedge clk0)
begin
wave_int=wave_in;//采样;
case (wave_int)	//译码;
0:wave_low=0;
1:wave_low=0;
2:wave_low=0;
3:wave_low=0;
4:wave_low=0;
5:wave_low=0;
6:wave_low=0;
7:wave_low=0;
8:wave_low=1;
9:wave_low=1;
10:wave_low=1;
11:wave_low=1;
12:wave_low=1;
13:wave_low=1;
14:wave_low=1;
15:wave_low=1;
16:wave_low=2;
17:wave_low=2;
18:wave_low=2;
19:wave_low=2;
20:wave_low=2;
21:wave_low=2;
22:wave_low=2;
23:wave_low=2;
24:wave_low=3;
25:wave_low=3;
26:wave_low=3;
27:wave_low=3;
28:wave_low=3;
29:wave_low=3;
30:wave_low=3;
31:wave_low=3;
endcase
end

assign wave_out[1:0]=wave_low;
assign wave_out[7:2]=6'b000000;

always@(posedge clk0)
begin
wave_low1=wave_low;
end

xor (alert0,wave_low,wave_low1);
and (alert,alert0[0],alert0[1]);

//lcm control state circle;
//state: warmup,wait_long0,clc,wait_long1,function_set,
//display_set,input_set,CGRAM_set,code_address,
//input_set1,DDRAM_set,wave_code;

always @(posedge clk)
begin
if(reset==0)	state=warmup;
case (state)
warmup:	RW=0;
	RS=0;
	en=1;
	data_out=8'b00000000;
	state=wait_long0;
	//reset_count=0;
wait_long0:
	if(count==1) en=0;
	else if(count==31) state=clc;
	else state=wait_long0;
clc:	en=1;
	data_out=8'b00000001;
	state=wait_long1;
	//reset_count=0;
wait_long1:
	if(count==1) en=0;
	else if(count==31) state=function_set;
	else state=wait_long1;
function_set:
	en=1;
	data_out=8'b00110000;
	state=display_set;
display_set:
	data_out=8'b00001000;
	state=input_set;
input_set:
	data_out=8'b00000110;
	state=CGRAM_set;
CGRAM_set:
	data_out=8'b01000000;
	state=code_address;
	//reset_count=0;
code_address:
	RS=1;
	case (count)
	0:data_out=8'b00000111;
	1:data_out=8'b00001110;
	2:data_out=8'b00011000;
	3:data_out=8'b00010000;
	4:data_out=8'b00000000;
	5:data_out=8'b00000000;
	6:data_out=8'b00000000;
	7:data_out=8'b00000000;
	8:data_out=8'b00011100;
	9:data_out=8'b00001110;
	10:data_out=8'b00000011;
	11:data_out=8'b00000001;
	12:data_out=8'b00000000;
	13:data_out=8'b00000000;
	14:data_out=8'b00000000;
	15:data_out=8'b00000000;
	16:data_out=8'b00000000;
	17:data_out=8'b00000000;
	18:data_out=8'b00000000;
	19:data_out=8'b00011000;
	20:data_out=8'b00001100;
	21:data_out=8'b00000111;
	22:data_out=8'b00000011;
	23:data_out=8'b00000000;
	24:data_out=8'b00000000;
	25:data_out=8'b00000000;
	26:data_out=8'b00000000;
	27:data_out=8'b00000001;
	28:data_out=8'b00000011;
	29:data_out=8'b00001110;
	30:data_out=8'b00011100;
	31:data_out=8'b00000000;
	endcase
	if(count==31) state=input_set1;
input_set1:
	RS=0;
	data_out=8'b00000111;
	state=DDRAM_set;
DDRAM_set:
	data_out=8'b10001111;	
	state=wave_code;
wave_code:
	RS=1;
	data_out=wave_out;
	state=wave_code;
endcase
end

always@(posedge clk)
begin
if(reset_count==0) count=0;
else count=count+1;
end

endmodule

⌨️ 快捷键说明

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