微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > VHDL写数模转换芯片的控制电路问题,仿真和实际信号不一样

VHDL写数模转换芯片的控制电路问题,仿真和实际信号不一样

时间:10-02 整理:3721RD 点击:
求大神!
FPGA入门不久,在写一个SPI 串口协议的 DAC 芯片控制模块,觉得仿真得到的结果没有问题,但是上了板子之后就各种不对。困在这个问题上好几天了,求大神帮忙看一眼啊,就是这段代码:
architecture Behavioral of DtoA_unit2 is
constant data1 : std_logic_vector(11 downto 0) := "110011001100";         --12位的数字电压值输入
constant address:std_logic_vector(3 downto 0) := "0101";                          --16通道的通道选择
signal DATA:std_logic_vector(23 downto 0) := "0000"& address &"11" & data1 & "00";--24位的SPI控制字
signal count_clk: std_logic_vector(9 downto 0):="0000000000";
begin
process (CLK,RESET)
        begin
                if (CLK'event and CLK='0') then
                        if (RESET='0') then
                                count_clk = "0000110011" then
                                count_clk<=count_clk;
                        else
                         count_clk<=count_clk+'1';
                end if;
               
                if count_clk<"0000000011" then
                                SYNC_LOW<='1';
                                else
                                SYNC_LOW<='0';
                        end if;
               
                if count_clk<"0000000100" then
                        SCLK<='1';
                        SDIN<=DATA(23);      
                       
                elsif count_clk<"0000000101" then
                        SCLK<='0';
                        SDIN<=DATA(23);                                --翻一下SCLK,载入第二十三位命令   
                elsif count_clk<"0000000110" then
                        SCLK<='1';
                        SDIN<=DATA(22);
                elsif count_clk<"0000000111" then
                        SCLK<='0';
                        SDIN<=DATA(22);                         --翻一下SCLK,载入第二十二位命令
                                       
               
                   。中间就是不断重复这个过程,直到第一位
                       elsif count_clk<"0000110010" then
                        SCLK<='1';
                        SDIN<=DATA(0);
       
                elsif count_clk<"0000110011" then
                        SCLK<='0';
                        SDIN<=DATA(0);                        --翻SCLK,载入最后一位命令
                       
                end if;
                end if;
                end process;
end Behavioral;
仿真如图片所示,,但是上到板子之后,逻辑分析仪看到的基本上就是噪声,只有reset起作用。改过一些地方之后,变成不理会reset, 而是不断地送命令出来。请问是因为这种写法有问题吗? 这段码是参照网上的一个example写的,是不是有什么功能只可仿真不能综合?
先谢过!


仿真结果


友情帮顶~~~~~~~~~~~~~~~~~~~~~

我觉得你用状态机写吧,这个好难看懂

状态机可能因为不够熟练,开始写的状态机,总是莫名其妙的原因编译都过不了,,然后找了这个例子,写出来还靠谱点。上了板子之后以后能输出电压一会又不行的。
状态机还在接着研究。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top