fpga直方图源代码(fpga直方图均衡)
admin 发布:2022-12-19 21:31 104
今天给各位分享fpga直方图源代码的知识,其中也会对fpga直方图均衡进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
求求RS(255,239)的FPGA源码,含编码和解码
PL2303 是Prolific 公司的RS232-USB 接口转换器,可提供一个RS232 全双工异步串行通信装置与USB 功能接口便利联接的解决方案,可调节的3~5 V 输出电压,满足3V、3.3V和5V不同应用需求;支持完整的RS232接口。 你用FPGA直接与串口通信,长时间肯定是要丢包的,只是你测试使用短,又是常温下,现象不明显;你看下RS232的电气特性就知道了: EIA-RS-232C 对电器特性、逻辑电平和各种信号线功能都作了规定。 在TxD和RxD上: 逻辑1(MARK)=-3V~-15V 逻辑0(SPACE)=+3~+15V 在RTS、CTS、DSR、DTR和DCD等控制线上: 信号有效(接通,ON状态,正电压)=+3V~+15V 信号无效(断开,OFF状态,负电压)=-3V~-15V 而FPGA的接口通常使用的都是 LVTTL或CMOS的, 电气特性上就决定了不能直接通信。
求一个基于fpga的i2c总线控制器的源代码
// eeprom 24c02,08,16 radom byte read and write master
// author: jiajia.pi
// version: v1.2
// last modify date: 2014/08/19 change busy signal to ready
// clk_div range: 2~65535
// wr/rd bit is bit16 of wrdata, '0'=write, '1'=read
module i2c_master(
clk, // global clock
reset_n, // global reset
scl, // i2c tri-state clock
sda, // i2c tri-state data
addr, // i2c word address
wrdata, // i2c 24bit write data, include device address, word address, 8bit write datas
rddata, // i2c 8bit read data
ready, // i2c ready output, assert high
ack // i2c acknowledge output
);
parameter [15:0] clk_div = 27_000_000/50_000-1; // i2c clock divsion
input clk;
input reset_n;
input wr;
input rd;
input [23:0]wrdata;
output [7:0]rddata;
output busy;
output ack;
inout scl;
inout sda;
reg [23:0]dat;
reg sco;
reg sdo;
reg [7:0]rddata;
reg busy;
reg ack1,ack2,ack3;
wire sda = sdo?1'bz:0;
wire scl = (sco|i2c_clk)?1'bz:0;
wire ready = !(wr||rd||busy);
wire rdnwr = dat[16];
wire ack = ack1|ack2|ack3;
reg[15:0] cnt;
always@(posedge clk or negedge reset_n)
if(!reset_n)
cnt = 0;
else if(cntclk_div busy)
cnt = cnt + 1;
else
cnt = 0;
wire i2c_clk_high_pos = (cnt==(clk_div2));
wire i2c_clk_low_pos = (cnt==(3*clk_div2));
wire i2c_dout_pos = (cnt==(clk_div));
wire i2c_din_pos = (cnt==(clk_div1));
reg i2c_clk;
always@(posedge clk or negedge reset_n)
if(!reset_n)
i2c_clk = 0;
else if(i2c_clk_high_pos)
i2c_clk = 1;
else if(i2c_clk_low_pos)
i2c_clk = 0;
reg [5:0] sck_cnt;
always@(posedge clk or negedge reset_n)
if(!reset_n)
sck_cnt = 63;
else if(rd|wr !busy)
sck_cnt = 0;
else if(!rdnwr sck_cnt==19 i2c_dout_pos)
sck_cnt = 22;
else if(rdnwr sck_cnt==30 i2c_dout_pos)
sck_cnt = 33;
else if(sck_cnt44 i2c_dout_pos)
sck_cnt = sck_cnt + 1;
always@(posedge clk or negedge reset_n)
if(!reset_n)
dat = 0;
else if(rd|wr !busy)
dat = wrdata;
always@(posedge clk or negedge reset_n)
if(!reset_n)
sdo = 1;
else if(i2c_dout_pos)
case(sck_cnt)
0: sdo = 1;
// write start
1: sdo = 0;
// device address
2: sdo = dat[23];
3: sdo = dat[22];
4: sdo = dat[21];
5: sdo = dat[20];
6: sdo = dat[19];
7: sdo = dat[18];
8: sdo = dat[17];
9: sdo = 0; //device write
10: sdo = 1; // ack1
// word address
11: sdo = dat[15];
12: sdo = dat[14];
13: sdo = dat[13];
14: sdo = dat[12];
15: sdo = dat[11];
16: sdo = dat[10];
17: sdo = dat[9];
18: sdo = dat[8];
19: sdo = 1; // ack2
// read start
20: sdo = 1;
21: sdo = 0;
// write data
22: if(rdnwr) sdo = dat[23]; else sdo = dat[7];
23: if(rdnwr) sdo = dat[22]; else sdo = dat[6];
24: if(rdnwr) sdo = dat[21]; else sdo = dat[5];
25: if(rdnwr) sdo = dat[20]; else sdo = dat[4];
26: if(rdnwr) sdo = dat[19]; else sdo = dat[3];
27: if(rdnwr) sdo = dat[18]; else sdo = dat[2];
28: if(rdnwr) sdo = dat[17]; else sdo = dat[1];
29: if(rdnwr) sdo = 1; else sdo = dat[0];
30: sdo = 1; // write ack3
// write stop
31: sdo = 0;
32: sdo = 1;
// read data
33: sdo = 1; // bit 7
34: sdo = 1; // bit 6
35: sdo = 1; // bit 5
36: sdo = 1; // bit 4
37: sdo = 1; // bit 3
38: sdo = 1; // bit 2
39: sdo = 1; // bit 1
40: sdo = 1; // bit 0
41: sdo = 1; // read no ack
// read stop
42: sdo = !rdnwr;
43: sdo = 1;
endcase
always@(posedge clk or negedge reset_n)
if(!reset_n)
rddata = 0;
else if(i2c_din_pos)
case(sck_cnt)
34: rddata[7]= sda;
35: rddata[6]= sda;
36: rddata[5]= sda;
37: rddata[4]= sda;
38: rddata[3]= sda;
39: rddata[2]= sda;
40: rddata[1]= sda;
41: rddata[0]= sda;
endcase
always@(posedge clk or negedge reset_n)
if(!reset_n)
ack1 = 1;
else if(i2c_din_pos sck_cnt==11)
ack1 = sda;
always@(posedge clk or negedge reset_n)
if(!reset_n)
ack2 = 1;
else if(i2c_din_pos sck_cnt==20 rdnwr) // read ack2
ack2 = sda;
else if(i2c_din_pos sck_cnt==22 !rdnwr) // write ack2
ack2 = sda;
always@(posedge clk or negedge reset_n)
if(!reset_n)
ack3 = 1;
else if(i2c_din_pos sck_cnt==31 !rdnwr) // write ack3
ack3 = sda;
else if(i2c_din_pos sck_cnt==33 rdnwr) // read ack3
ack3 = sda;
always@(posedge clk or negedge reset_n)
if(!reset_n)
sco = 1;
else if(sck_cnt==2 i2c_clk_low_pos) // write start
sco = 0;
else if(sck_cnt==21 i2c_clk_low_pos rdnwr) // read start high
sco = 1;
else if(sck_cnt==22 i2c_clk_low_pos rdnwr) // read start low
sco = 0;
else if(sck_cnt==32 i2c_clk_low_pos !rdnwr) // write stop
sco = 1;
else if(sck_cnt==43 i2c_clk_low_pos) // read stop
sco = 1;
always@(posedge clk or negedge reset_n)
if(!reset_n)
busy = 0;
else if(rd|wr !busy)
busy = 1;
else if(sck_cnt==44)
busy = 0;
endmodule
我自己写的,希望能帮到你
用FPGA编写12864显示的程序,跪求。。。可以显示就行,内容可以是字母。。谢谢
/*LCD12864显示程序
此程序控制LCD12864液晶屏,IC为KS0108或兼容型号
图形文件获取方法:
在字模提取V21软件中 ,导入一幅128*64黑白图像.
* 参数设置:
* 参数设置-其它选项,选择纵向取模,勾上字节倒序,保留逗号,
* 取模方式为C51。
将生成的数组通过keilc等C编译软件,在编译软件中新建一工程,写入源程序如下:
unsigned char code tab[]=
{
//图像数据
}
编译此工程将得到hex文件.在QII中使用lpm_rom宏功能模块中调用此hex文件.
*
*******************************************************************************/
module newlcd(clock,rst_n,rs,rw,en,data,lcd_cs);
// I/O口声明
input clock; //系统时钟
input rst_n; //复位信号
output[1:0] lcd_cs; //
output rs; //1:数据模式;0:指令模式
output rw; //1:读操作;0:写操作
output en; //使能信号,写操作时在下降沿将数据送出;读操作时保持高电平
output[7:0] data; //LCD数据总线
// I/O寄存器
reg rs;
reg en;
reg[1:0] lcd_cs;
reg[7:0] data;
//内部寄存器
reg[3:0] state; //状态机
reg[3:0] next_state;
reg[20:0] div_cnt; //分频计数器
reg[9:0] cnt; //写操作计数器
reg cnt_rst; //写操作计数器复位信号
wire[7:0] showdata; //要显示的数据
reg[1:0] cs_r;
reg [2:0] page_addr;
reg [5:0] row_addr;
//内部网线
wire clk_div; //分频时钟
wire clk_divs;
wire page_done; //写一行数据完成标志位
wire frame_done; //写一屏数据完成标志位
wire left_done;
//状态机参数
parameter idle =4'b0000,
setbase_1 =4'b0001,
setbase_2 =4'b0011,
setmode_1 =4'b0010,
setmode_2 =4'b0110,
SETpage_addr_1 =4'b0111,
SETpage_addr_2 =4'b0101,
SETrow_addr_1 =4'b1101,
SETrow_addr_2 =4'b1111,
write_right_1 =4'b1110,
write_right_2 =4'b1010,
write_nextpage_1 =4'b1011,
write_nextpage_2 =4'b1001,
wr_data_1 =4'b0100,
wr_data_2 =4'b1100;
// set_1 =4'b1000;
//******************************代码开始*********************************
assign rw = 1'b0; //对LCD始终为写操作
//时钟分频
always@(posedge clock or negedge rst_n)
begin
if(!rst_n)
div_cnt = 0;
else
div_cnt = div_cnt+1'b1;
end
assign clk_div = (div_cnt[15:0] == 20'h7fff);
//状态机转向
always@(posedge clock or negedge rst_n)
begin
if(! rst_n)
state = idle;
else if(clk_div)
state = next_state;
end
//************************状态机逻辑*********************************
always@(state or page_done or left_done or frame_done or cnt or showdata or page_addr or row_addr or cs_r)
begin
rs = 1'b0;
en = 1'b0;
lcd_cs = cs_r;
cnt_rst = 1'b0;
data = 8'h0;
case(state)
idle:
begin
next_state = setbase_1;
cnt_rst = 1'b1;
end
//**************************初始化LCD********************************
setbase_1: //基本指令操作
begin
lcd_cs = 2'b11;
next_state = setbase_2;
data = 8'hc0;
en = 1'b1;
end
setbase_2:
begin
lcd_cs = 2'b11;
next_state = setmode_1;
data = 8'hc0;
end
//******************************************************************
setmode_1:
begin
lcd_cs = 2'b11;
next_state = setmode_2;
data = 8'h3f;
en =1'b1;
end
setmode_2:
begin
next_state = SETpage_addr_1;
data = 8'h3f;
end
//******************************************************************
SETpage_addr_1: //设置页地址
begin
next_state = SETpage_addr_2;
data = ;
en = 1'b1;
end
SETpage_addr_2:
begin
next_state = SETrow_addr_1;
data = ;
end
SETrow_addr_1: //设置列地址
begin
next_state = SETrow_addr_2;
data = ;
en = 1'b1;
end
SETrow_addr_2:
begin
next_state = wr_data_1;
data = ;
end
//******************************************************************
/*
write_right_1: //写完左半屏64个,换为右半屏显示
begin
next_state =write_right_2;
row_addr = 0;
end
write_right_2:
begin
next_state = SETpage_addr_1;
end
//******************************************************************
write_nextpage_1: //写完全一行128个
begin
next_state =write_nextpage_2;
row_addr = 0;
end
write_nextpage_2:
begin
next_state = SETpage_addr_1;
end
*/
//******************************************************************
wr_data_1: //写数据到图形显示区
begin
next_state = wr_data_2;
rs = 1'b1;
en = 1'b1;
data = showdata;
end
wr_data_2:
begin
rs = 1'b1;
data = showdata;
if(left_done) //写完左半屏数据64个
begin
if(page_done) //写完一页数据128个
begin
if(frame_done) //写完一屏数据(8页)
next_state = idle;
else
// next_state = write_nextpage_1;
next_state = SETpage_addr_1;
end
else
// next_state = write_right_1;
next_state = SETpage_addr_1;
end
else
next_state = wr_data_1;
end
default: next_state = idle;
endcase
end
//********************************************************************
always@(posedge clock)
begin
if(clk_div)
begin
if(cnt_rst)
begin
cnt = 0;
end
else if(state == wr_data_2)
begin
cnt = cnt+1'b1;
end
end
end
//****************************************************
always@(posedge clock or negedge rst_n)
if(!rst_n)
begin
cs_r = 2'b01;
page_addr = 0;
end
else
if(clk_div (state == wr_data_2))
if(page_done)//
begin
cs_r = 2'b01;
page_addr = page_addr + 1'b1;//一页写完时写下一页
end
else
if(left_done)
begin
cs_r = 2'b10;
end
//*********************************************************************
//********************************************************************
assign left_done = (cnt[5:0] == 6'd63); //写完左半屏数据64个
assign page_done = (cnt[6:0] == 7'd127); //写完一页数据128个
assign frame_done = (cnt[9:4] == 7'h3f); //写完一屏数据
//***********************************************************************
//*******************************************************************
//调用ROM(图片数据)
rom rom(.address(cnt+'d8),.clock(clock),.q(showdata));
endmodule
开发板例程 自己看吧
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
fpga直方图源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于fpga直方图均衡、fpga直方图源代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
- 上一篇:关于源代码bs教务系统下载的信息
- 下一篇:关于我们页面代码(web页面代码)
相关推荐
- 04-28glib源代码(glibc源码)[20240428更新]
- 04-28微软宠物商店源代码(java宠物商店项目代码)[20240428更新]
- 04-28深入体验项目开发源代码(源代码和项目)[20240428更新]
- 04-27火柴游戏java源代码(火柴游戏c语言代码)[20240427更新]
- 04-27请假系统源代码(休假管理系统源码)[20240427更新]
- 04-27h5俄罗斯方块源代码(俄罗斯方块js代码)[20240427更新]
- 04-27安卓学校app源代码(教育类app源码)[20240427更新]
- 04-27仿源代码(仿csdn源码)[20240427更新]
- 04-27八字排盘的源代码(在线排盘八字排盘)[20240427更新]
- 04-27html网站源代码(html5源代码网站)[20240427更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接