[Actel FPGA] 内部温度读取.

[复制链接]
2432|3
 楼主| l1f2ng 发表于 2008-4-21 21:21 | 显示全部楼层 |阅读模式
<br />module&nbsp;ADC_control(clk48m,rst,VAREF,data_out,button_input);<br />&nbsp;input&nbsp;clk48m;//pay&nbsp;more&nbsp;attention&nbsp;to&nbsp;the&nbsp;ADC&nbsp;clock&nbsp;,&nbsp;it's&nbsp;need&nbsp;to&nbsp;40M<br />&nbsp;input&nbsp;rst;<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;&nbsp;button_input;<br />&nbsp;inout&nbsp;VAREF;<br />&nbsp;output[7:0]&nbsp;data_out;&nbsp;&nbsp;&nbsp;//结果送到LED上<br />&nbsp;wire&nbsp;&nbsp;&nbsp;clk10m;<br />&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;clk40m;<br />//-----------------------------control&nbsp;the&nbsp;ADC------------------------------------------&nbsp;<br />&nbsp;reg[2:0]&nbsp;state;<br />&nbsp;reg[11:0]&nbsp;adc_result;<br />&nbsp;wire&nbsp;DATAVALID;<br />&nbsp;wire&nbsp;CALIBRATE;<br />&nbsp;wire&nbsp;&nbsp;BUSY;<br />&nbsp;wire[11:0]&nbsp;&nbsp;ADC_RESULT;<br />&nbsp;wire&nbsp;data_come;<br />&nbsp;reg&nbsp;ADCSTART;<br />&nbsp;reg&nbsp;ADCRESET;<br />&nbsp;assign&nbsp;data_come=(~BUSY)&DATAVALID;//意味数据有效<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<a href="mailto:always@(posedge">always@(posedge</a>&nbsp;clk10m)<br />&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(rst&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&lt=3'b000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCRESET&lt=1'b1;&nbsp;//ADC&nbsp;initial&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCSTART&lt=1'b0;&nbsp;&nbsp;//not&nbsp;start&nbsp;to&nbsp;ADC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adc_result&lt=12'h000;&nbsp;//the&nbsp;ADC&nbsp;result<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;case(state)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3'b000:&nbsp;begin&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCRESET&lt=1'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCSTART&lt=1'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adc_result&lt=adc_result;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&lt=3'b001;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3'b001:&nbsp;begin&nbsp;////let&nbsp;the&nbsp;ADC&nbsp;start&nbsp;to&nbsp;work<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCRESET&lt=1'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adc_result&lt=adc_result;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CALIBRATE)&nbsp;&nbsp;&nbsp;&nbsp;//上电校准后,启动AD转换<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;state&lt=3'b001;ADCSTART&lt=1'b0;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;begin&nbsp;state&lt=3'b011;&nbsp;ADCSTART&lt=1'b1;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3'b011:&nbsp;begin&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCRESET&lt=1'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data_come)//读取结果<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adc_result&lt=ADC_RESULT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&lt=3'b000;ADCSTART&lt=1'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adc_result&lt=adc_result;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&lt=3'b011;ADCSTART&lt=1'b1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCRESET&lt=1'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCSTART&lt=1'b0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adc_result&lt=12'h000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&lt=3'b000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endcase<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assign&nbsp;data_out=button_input?adc_result[11:4]:8'b1111_1111;<br />pll_analog&nbsp;&nbsp;MM(.POWERDOWN(1'b1),.CLKA(clk48m),.LOCK(),.GLA(clk40m),.GLB(clk10m));<br />intern_voltage&nbsp;M_ADC(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.SYS_CLK(clk40m),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.SYS_RESET(!rst),&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.VAREF(VAREF),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.DATAVALID(DATAVALID),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.INTERNAL_TEMPERATURE_STB(1'b1),//使能内部温度<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ADCSTART(ADCSTART),//ADC&nbsp;begin&nbsp;to&nbsp;work<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ADCRESET(ADCRESET),//ADC&nbsp;initial&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.PWRDWN(1'b0),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.MODE(4'b0110),&nbsp;//8'bit&nbsp;not&nbsp;power&nbsp;down<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.VAREFSEL(1'b0),&nbsp;//inter&nbsp;reference&nbsp;voltage<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.STC(8'b00000101),&nbsp;//the&nbsp;ADC&nbsp;result&nbsp;keep&nbsp;7&nbsp;waiting&nbsp;ADCCLOCK<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.TVC(8'b00000000),&nbsp;//ADCCLOCK=SYSCLK/4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.CHNUMBER(5'b11111),//选择读温度<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.CALIBRATE(CALIBRATE),&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.BUSY(BUSY),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.SAMPLE(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ADC_RESULT(ADC_RESULT),//ADC&nbsp;result<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ACMCLK(),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果读内部温度,这个信号没有用吧?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.INIT_ADDR(),&nbsp;&nbsp;&nbsp;//如果读内部温度,这个信号没有用吧?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.INIT_DATA(),&nbsp;&nbsp;&nbsp;//如果读内部温度,这个信号没有用吧?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.INIT_ACM_WEN()&nbsp;//如果读内部温度,这个信号没有用吧?<br />&nbsp;);<br />endmodule<br />我是这样配置的,可读取的内核温度值总是0,&nbsp;怎样才能读取到正确的值?&nbsp;
 楼主| l1f2ng 发表于 2008-4-22 16:30 | 显示全部楼层

请问如何读取内部温度?

自己配置AD,但读取的值总是0,向高人请教方法?<br />
hecf 发表于 2008-4-29 22:51 | 显示全部楼层

这个问题没有工程师出来解释一下吗?我们也很急切解决这个问题啊
zlgactel 发表于 2008-5-6 20:15 | 显示全部楼层

您好

限于我们精力,不能帮您验证您的程序,我们给出的最好建议是先用ModelSim仿真一下,这是查找问题的最好方法,关于模拟部分的仿真,您可以参加我们的置顶帖子,上面有一个很详细的官方例程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部