Ich habe ein Verilog Modul gefunden das ich für meine Zwecke in VHDL
umschreiben möchte. bei folgendem Prozess habe ich ein wenig Probleme
1 | always @(negedge adc_clk_i)
|
2 | begin
|
3 | adc_state_m1 <= adc_state;
|
4 | adc_clk_en <= ((adc_state_m1 == ADC_END_CNV_STATE) || (adc_state_m1 == ADC_READ_CNV_RESULT) && (sclk_clk_cnt != 0)) ? 1'b1 : 1'b0;
|
5 | end
|
wie zu sehen ist, werden hier non blocking zuweisungen verwendet und
soweit ich mich jetzt richtig erkundigt könnte ich in VHDL anstelle
eines Signals eine Variable benutzen.
Gesagt, getan und das ist daraus geworden:
1 | ADCCLK_valid: process(ADC_CLK)
|
2 | variable adc_state_m1: state:=ADC_IDLE_STATE ;
|
3 | begin
|
4 | if falling_edge(ADC_CLK)then
|
5 | adc_state_m1 := adc_state;
|
6 |
|
7 | if((adc_state_m1 = ADC_END_CNV_STATE) or ((adc_state_m1 = ADC_READ_CNV_RESULT)and(sclk_clk_cnt /= "0000000")) ) then
|
8 | --if (sclk_clk_cnt /= "0000000") then
|
9 | adc_clk_en <='1';
|
10 | else
|
11 | adc_clk_en <='0';
|
12 | --end if;
|
13 | end if;
|
14 | end if;
|
15 |
|
16 | end process ADCCLK_valid;
|
das scheint aber nicht so recht zu funktionieren. ich musste eine
klammer um die beiden operanten für das "and" setzen da ISE meckert,aber
denke mal das sollte nicht das Problem sein da auch Verilog das "and"
zuerst auflöst oder?