当前位置: 首页 > news >正文

开发网站开发工程师招聘要求自动做设计的网站

开发网站开发工程师招聘要求,自动做设计的网站,网站开发 开题报告,怎么在百度上做单位网站一、简介 在上一篇文章中我们对于DS18B20的相关理论进行了详细的解释#xff0c;同时也对怎样使用DS18B20进行了一个简单的叙述。在这篇文章我们通过工程来实现DS18B20的温度读取并且实现在数码管伤显示。 1、基本实现思路 根据不同时刻的操作#xff0c;我们可以使用一个状…一、简介 在上一篇文章中我们对于DS18B20的相关理论进行了详细的解释同时也对怎样使用DS18B20进行了一个简单的叙述。在这篇文章我们通过工程来实现DS18B20的温度读取并且实现在数码管伤显示。 1、基本实现思路 根据不同时刻的操作我们可以使用一个状态机来实现温度的读取。 如图所示通过 初始化——ROM指令写入——温度转换命令写入——二次初始化——二次ROM指令写入——温度读取命令写入——温度读取等一系列操作就可以实现DS18B20的温度读取。 2、状态转换框图 将实现思路划分成6个状态从而减少代码量。 二、工程实现 1、设计文件的编写 1DS18B20 新建一个ds18b20.v文件如下在这里需要用到的计数器非常多如果对于每个状态都使用一个计数器的话所占用的资源就会非常多这里我们可以根据状态进行划分实现同一个计数器在不同状态进行不同计数的方法也就是分时复用的思路对于计数器进行带编写。并且在实现代码中我们将跳过ROM指令和温度转换指令写在一起将跳过ROM指令和温度读取指令写在一起通过同一个位宽的bit计数器就可以进行命令的写入。 module ds18b20_driver( input clk ,input rst_n ,//ds182b20 portinout dq ,//单总线双向口//user portoutput reg sign ,//符号位正数为0负数为1output reg [19:0] dout ,output reg dout_vld ); //-------------参数定义--------------------------------------------------------- //状态机参数定义localparam INIT 6b0000_01,//主机初始化状态主机发送复位脉冲--主机释放总线--主机接收存在脉冲ds18b20接收到存在脉冲后拉低总线WRCMD 6b0000_10,//主机发送跳过ROM命令状态WAIT 6b0001_00,//等待温度转换完成状态INIT_AGAIN 6b0010_00,//二次初始化RDCMD 6b0100_00,//主机发送读取温度命令状态RDTEM 6b1000_00;//主机读取温度2字节状态//时间参数定义parameter TIME_1US 50;//1usparameter TM_INIT 720 ,//初始化时间750us主机发送复位脉冲至少480us取500us--主机释放总线15-60us取20us--主机接收存在脉冲60-240us取200usTM_LOW 2 ,//读写时隙拉低总线至少1us取2usTM_60US 60 ,//读写时隙至少60usTM_3US 3 ,//连续两个读或写时隙至少间隔1us的恢复时间TM_WAIT 750_000 ;//温度转换最大750ms精度12bits//命令参数定义localparam CMD_SKROM 8hCC,//跳过ROM命令CMD_CONVE 8h44,//温度转换命令CMD_RDCMD 8hBE;//读取温度命令//-------------内部信号定义-----------------------------------------------------wire dq_in ;//双向端口输入reg dq_out ;//双向端口输出reg dq_out_en ;//双向端口输出使能reg [5:0] state_c ;//状态机现态reg [5:0] state_n ;//状态机次态reg [7:0] cnt_1us ;//1us基准计数器wire add_cnt_1us ;wire end_cnt_1us ;reg [19:0] xx ;reg [19:0] cnt_xx ;//复用计数器wire add_cnt_xx ;wire end_cnt_xx ;reg [4:0] cnt_bit ;//比特计数器wire add_cnt_bit ;wire end_cnt_bit ;reg presen_pulse;//存在脉冲reg flag ;//标志信号 发起温度转换为0读取温度为1reg [15:0] wr_data ;//写入数据(命令)reg [15:0] rd_data ;//读出的温度数据wire init2wrcmd ;wire wrcmd2wait ;wire wait2initagain ;wire initagain2rdcmd ;wire rdcmd2rdtem ;wire rdtem2init ;assign dq dq_out_en ? dq_out : 1bz;//输出使能为1时输出为0时高阻态assign dq_in dq ;//高阻态时将双向总线的数据赋值给输入//--state_c(三段式状态机)always (posedge clk or negedge rst_n)begin if(!rst_n)beginstate_c INIT;end else begin state_c state_n;end endalways (*) begincase(state_c)INIT : beginif(init2wrcmd)begin state_n WRCMD;endelse begin state_n state_c;endendWRCMD : beginif(wrcmd2wait)begin state_n WAIT;endelse begin state_n state_c;endendWAIT : beginif(wait2initagain)begin state_n INIT_AGAIN;endelse begin state_n state_c;endendINIT_AGAIN : beginif(initagain2rdcmd)begin state_n RDCMD;endelse begin state_n state_c;endendRDCMD : beginif(rdcmd2rdtem)begin state_n RDTEM;endelse begin state_n state_c;endendRDTEM : beginif(rdtem2init)begin state_n INIT;endelse begin state_n state_c;endenddefault : state_n INIT;endcaseendassign init2wrcmd (state_c INIT ) end_cnt_xx !presen_pulse;assign wrcmd2wait (state_c WRCMD ) end_cnt_bit ;assign wait2initagain (state_c WAIT ) end_cnt_xx;assign initagain2rdcmd (state_c INIT_AGAIN) end_cnt_xx !presen_pulse;assign rdcmd2rdtem (state_c RDCMD ) end_cnt_bit;assign rdtem2init (state_c RDTEM ) end_cnt_bit;//--cnt_1usalways (posedge clk or negedge rst_n)begin if(!rst_n)begincnt_1us d0;end else if(add_cnt_1us)begin if(end_cnt_1us)begin cnt_1us d0;endelse begin cnt_1us cnt_1us 1b1;end endelse cnt_1us cnt_1us;end assign add_cnt_1us 1b1;assign end_cnt_1us add_cnt_1us cnt_1us TIME_1US - 1;//--cnt_xxalways (posedge clk or negedge rst_n)begin if(!rst_n)begincnt_xx d0;end else if(add_cnt_xx)begin if(end_cnt_xx)begin cnt_xx d0;endelse begin cnt_xx cnt_xx 1b1;end endend assign add_cnt_xx end_cnt_1us;assign end_cnt_xx add_cnt_xx cnt_xx xx - 1;//xx always (posedge clk or negedge rst_n)begin if(!rst_n)beginxx d0;end else if((state_c INIT) ||(state_c INIT_AGAIN))begin xx TM_INIT;end else if(state_c WAIT)beginxx TM_WAIT;endelse begin //除了INIT和WAIT两个状态其它几个状态都在读或写IDLE状态未考虑计数器在IDLE状态下不工作xx TM_LOW TM_60US TM_3US;//读写1bit数据需要的时间end end//--cnt_bitalways (posedge clk or negedge rst_n)begin if(!rst_n)begincnt_bit d0;end else if(add_cnt_bit)begin if(end_cnt_bit)begin cnt_bit d0;endelse begin cnt_bit cnt_bit 1b1;end endend assign add_cnt_bit end_cnt_xx (state_c WRCMD || state_c RDCMD || state_c RDTEM);assign end_cnt_bit add_cnt_bit cnt_bit 16-1;//--presen_pulsealways (posedge clk or negedge rst_n)begin if(!rst_n)beginpresen_pulse d0;end else if(((state_c INIT) ||(state_c INIT_AGAIN)) (cnt_xx 550) (end_cnt_1us))begin presen_pulse dq_in;end end //--wr_data always (posedge clk or negedge rst_n)begin if(!rst_n)beginwr_data d0;end else if(state_c WRCMD)begin wr_data 16h44cc;end else if(state_c RDCMD)begin wr_data 16hbecc;endelse begin wr_data d0;end end //--dq_out、dq_out_en always (posedge clk or negedge rst_n)begin if(!rst_n)begindq_out_en d0;dq_out d0;end else if((state_c INIT ||state_c INIT_AGAIN) (cnt_xx 20d500))begin dq_out_en 1b1;dq_out 1b0;end else if(state_c WRCMD || state_c RDCMD)begin if(cnt_xx TM_LOW)begin dq_out_en 1b1;dq_out 1b0;endelse if(cnt_xx TM_LOW cnt_xx (TM_LOWTM_60US))begin if(wr_data[cnt_bit] 0)begin //写0时隙dq_out_en 1b1;dq_out 1b0;endelse if(wr_data[cnt_bit] 1)begin //写1时隙dq_out_en 1b0;dq_out 1b0;endendelse begin //记住不能省略dq_out_en 1b0;dq_out 1b0;endendelse if(state_c RDTEM)begin if(cnt_xx TM_LOW)begin dq_out_en 1b1;dq_out 1b0;endelse begin dq_out_en 1b0;dq_out 1b0;endendelse begin dq_out_en 1b0;dq_out 1d0;endend//--rd_dataalways (posedge clk or negedge rst_n)begin if(!rst_n)beginrd_data d0;end else if(state_c RDTEM cnt_xx 20d12 )begin rd_data[cnt_bit] dq_in;end end//--dout、dout_vld、signalways (posedge clk or negedge rst_n)begin if(!rst_n)begindout d0;sign d0;end else if(state_c RDTEM end_cnt_bit)begin if(rd_data[15] 1b0)begin //读出的温度数据机器码符号位为0温度为正dout rd_data[10:0]*20d625;sign 1b0;endelse begin //读出的温度数据机器码符号位为1温度为负 dout (~rd_data[10:0] 1b1)*20d625; //考虑位宽溢出的问题sign 1b1;endend endalways (posedge clk or negedge rst_n)begin if(!rst_n)begindout_vld 1b0;end else dout_vld rdtem2init;endendmodule 2数码管 新建一个seg_driver.v文件如下 module seg_driver(input clk,input rst_n,input [23:0] din,input sign,output reg [5:0] sel,output reg [7:0] dig); //参数定义 parameter TIME_1MS 50_000; localparam ZERO 7b100_0000,ONE 7b111_1001,TWO 7b010_0100,TEREE 7b011_0000,FOUR 7b001_1001,FIVE 7b001_0010,SIX 7b000_0010,SEVEN 7b111_1000,EIGHT 7b000_0000,NINE 7b001_0000,P 7b000_1100,N 7b100_1000,NULL 7b111_1111;//内部信号定义 reg [15:0] cnt_1ms; wire add_cnt_1ms; wire end_cnt_1ms;reg [5:0] seg_r; reg flag;//小数点标志位 reg [23:0] dis_data; always (posedge clk or negedge rst_n)begin if(!rst_n)begincnt_1ms d0;end else if(add_cnt_1ms)begin if(end_cnt_1ms)begin cnt_1ms d0;endelse begin cnt_1ms cnt_1ms 1b1;end end end assign add_cnt_1ms 1b1 ; assign end_cnt_1ms add_cnt_1ms cnt_1ms TIME_1MS-1;//数码管位选 always (posedge clk or negedge rst_n)begin if(!rst_n)beginsel 6b111_110;end else if(end_cnt_1ms)begin sel {sel[4:0],sel[5]};end end //小数点位置 0为亮1为灭 always (posedge clk or negedge rst_n)begin if(!rst_n)beginflag d1;end else begin case (sel)6b110_111:flag 1b0; //第三个数码管位置default: flag d1;endcaseend end//数码管显示数据分布 always (posedge clk or negedge rst_n)begin if(!rst_n)begindis_data d0;end else begin case (sel)6b111_110:dis_data din[7:4];6b111_101:dis_data din[11:8];6b111_011:dis_data din[15:12];6b110_111:dis_data din[19:16];6b101_111:dis_data din[23:20];6b011_111:dis_data (sign ?4ha:4hb) ; default: ;endcaseend end//数据显示 always (posedge clk or negedge rst_n)begin if(!rst_n)begindig NULL;end else begin case (dis_data)0 :dig{flag,ZERO };1 :dig{flag,ONE };2 :dig{flag,TWO };3 :dig{flag,TEREE};4 :dig{flag,FOUR };5 :dig{flag,FIVE };6 :dig{flag,SIX };7 :dig{flag,SEVEN};8 :dig{flag,EIGHT};9 :dig{flag,NINE };4ha:dig{flag,N };4hb:dig{flag,P };default:dig NULL;endcaseend end endmodule 2、数据处理文件的编写 当我们进行温度读取时需要对原始数据进行处理之后采用将其显示在数码管中所以这里还需要一个处理数据文件进行数据转换新建一个data.v文件如下 module data(input clk,input rst_n,input [19:0] din,input din_vld,output [23:0] dout ); wire [7:0] data_r_int; wire [15:0] data_r_float; reg [3:0] data_r1; reg [3:0] data_r2; reg [3:0] data_r3; reg [3:0] data_r4; reg [3:0] data_g ; reg [3:0] data_s ; reg din_vld_r; assign data_r_intdin/10000; assign data_r_floatdin%10000;always (posedge clk or negedge rst_n)begin if(!rst_n)begindin_vld_r d0;end else din_vld_r din_vld; end always (posedge clk or negedge rst_n)beginif(!rst_n)begindata_r1d0;data_r2d0;data_r3d0;data_r4d0;data_g d0;data_s d0;endelse if(din_vld_r)begindata_s data_r_int/10;data_g data_r_int%10;data_r1data_r_float/1000;data_r2data_r_float/100%10;data_r3data_r_float/10%10;data_r4data_r_float%10;endend assign dout{data_s,data_g,data_r1,data_r2,data_r3,data_r4}; endmodule 3、顶层文件的编写 通过编写一个顶层文件将三个.v文件整合在一起新建一个top.v文件如下 module top (input clk ,input rst_n ,inout dq ,output tx ,output [5:0] sel,output [7:0] dig ); wire [23:0] dis_data;//温度数值 wire sign; //符号位 wire sign_out; wire [19:0] dout ; wire dout_vld;seg_driver seg_driver_inst(/*input */ .clk (clk) ,/*input */ .rst_n (rst_n) ,/*input [23:0] */ .din (dis_data ) ,/*input */ .sign (sign) ,/*output reg [5:0] */ .sel (sel) ,/*output reg [7:0] */ .dig (dig));data data_inst(/*input */ .clk (clk),/*input */ .rst_n (rst_n),/*input [19:0] */ .din (dout),/*input */ .din_vld(dout_vld),/*output [23:0]*/ .dout (dis_data) );ds18b20_driver ds18b20_driver_inst(/* input */. clk (clk ) ,/* input */. rst_n (rst_n ) ,/* input */. dq (dq ) ,//输入信号/* output reg [19:0]*/. dout (dout ) ,//串行发送出去的数据/* output */. dout_vld (dout_vld) ,/* output */. sign (sign ) //发送一字节完成信号 ); endmodule 4、在线调试 因为这里需过用modelsim进行仿真的话需要编写大量的测试文件代码才能进行仿真所以我们直接采取Signal Tap进行在线调试的方式进行波形抓取。 通过在线抓取经过调试之后我们可以直接看到温度的值通过下板验证可以看到数码管显示的值和抓取过程的值是一样的。在数码管中因为我们要显示一个符号位所以值保留3位小数。
http://www.dnsts.com.cn/news/254798.html

相关文章:

  • 沧州网站建设推广三亚北京网站建设
  • 电子商务公司网站设计网站备案密码查询
  • 锚文本对网站装修网土巴兔
  • python做电商网站在国外建网站方便吗
  • 华为企业网站建设分析python做网页界面
  • 个人网站模板之家网页制作与网站建设教程视频
  • 青海网站建设企业任丘市做网站
  • 网站正能量点进去就能看网站模板d一品资源网
  • 抖音代运营成功案例南宁seo咨询
  • 环境文化建设方案网站3d建模师工资一般多少
  • 为什么只有建设网站打不开网站建设线框图
  • 国内公司网站需要备案商务型网站模板
  • 手机电影网站怎么做的网页制作软件推荐
  • 电子商务网站建设的方法有哪些方面如何做网站稳定客户
  • 如何保存个人网站交流网站建设心得体会
  • 学网站开发网页制作网站 空间 备案
  • 旅游景区网站建设规划mip网站模板
  • 网站托管代运营wordpress 删除分类目录
  • 高明顺德网站建设义乌企业网站设计
  • 服装模板网站信息流优化师简历
  • 手机旅游视频网站模板网站建设行业税率
  • 做彩票网站犯法不长沙 外贸网站建设公司价格
  • 常州网站关键词推广自助网站建设软件
  • 网站访问量大怎么办sap软件
  • 深圳一元网站建设公司北京飞雨网站建设公司
  • 专注外贸建站wordpress百家号模版
  • 学校网站群建设必要潜江网站搭建
  • 重庆网站怎么做出来的学校建设外文网站情况
  • 网站制作前期所需要准备网站都不需要什么备案
  • 做网站熊掌号wordpress更新空白