[VHDL] 帮帮我看看哪里出问题了。达不到预期效果,我是个新手

[复制链接]
207|3
 楼主 | 2019-5-15 15:10 | 显示全部楼层 |阅读模式
源程序:
entity tmp_tj is
port(clk,swch:in std_logic;
     tmp_s:in std_logic_vector(7 downto 0);
          tmp_room: in std_logic_vector(7 downto 0);
          ht,rg,swch:out std_logic
     );
end tmp_tj ;
architecture oper of tmp_tj is
signal tm_in :std_logic_vector(7 downto 0);
signal tm_set :std_logic_vector(7 downto 0);
begin
tm_in<=tmp_room;
tm_set<=tmp_s;
process(clk,swch)
begin
if (swch='1') then
  if(clk'event and clk='1' ) then
      if (tm_in=tm_set) then
                      ht<='1';
                                rg<='1';
                                swi<='0';
                  elsif(tm_in>tm_set) then
                      ht<='0';
                                rg<='1';
                  else
                      ht<='1';
                      rg<='0';
        end if;
                end if;
  end if;
end process;
end oper;

问题: 我不知道怎么跳出自动温度调节模式,我看了好久的语法书和修改好多方式都达不到预期效果 ,求大神指导谢谢
QQ截图20190515144452.png

使用道具

评论回复
| 2019-5-15 22:19 | 显示全部楼层
VHDL中的判断相等是=还是==啊   
verilog是==

使用道具

评论回复
| 2019-5-19 21:52 | 显示全部楼层
开始用VHDL的时候首先要明确其是一种硬件描述语言,也就是说你写一句话的时候要大概知道是一个什么电路。
比如if(clk'event and clk='1' ) 是说clk这个信号要接到相关触发器的时钟上,1164库里写成rising_edge(clk)更加直观。
那么if (swch='1') then
  if(clk'event and clk='1' ) then 这两行要表达什么呢?是想用swch作使能吗?如果作使能通常要把这两行的顺序倒过来。
图中给一共标出了7中状态,那么要给这7种状态一个编码,比如从000多111可以作为一种。那么根据当前状态、下一状态、转移条件写出状态机的变化是很容易的事了。
状态机的转移与是否使用VHDL无关。都是一个套路。

使用道具

评论回复
 楼主 | 2019-5-23 10:17 | 显示全部楼层
ucx 发表于 2019-5-19 21:52
开始用VHDL的时候首先要明确其是一种硬件描述语言,也就是说你写一句话的时候要大概知道是一个什么电路。
...

明白了 谢谢

使用道具

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

快速回复 返回顶部 返回列表