搜索
bottom↓
回复: 8

我想问下这个rtl图里面的这些东西。。。

[复制链接]

出0入0汤圆

发表于 2009-10-26 11:52:33 | 显示全部楼层 |阅读模式

(原文件名:未命名.JPG)

如上图所示,那些rtl图里面有一个译码器下面有一长串的连线。我想是因为我定义的状态机是8位的,导致了有几百条输出,我想问的是,这么多的输出线,会占用很多的资源么?还是没有什么影响?

出0入0汤圆

 楼主| 发表于 2009-10-26 12:48:38 | 显示全部楼层
呃,没人愿意解答么、、、、、、、、

出0入0汤圆

发表于 2009-10-26 13:49:43 | 显示全部楼层
看不明白,,你的源码都不提供,,或许是你源码的描述,本身就与你的真实意图,有很大的差距..

20:11————看见你帖上的,源码,,不好意思::我只初懂 VHDL ,你这个是 V???G,
如果只是把“主CLK”分频,出来多个时钟,应该很容易做出来的。。。

你不妨,把你定义好的几个:输入,,输出信号的:关系用:“汉语”先描述一次。。

出0入0汤圆

发表于 2009-10-26 15:28:02 | 显示全部楼层
没有源码,怎么解释

出0入0汤圆

 楼主| 发表于 2009-10-26 17:36:57 | 显示全部楼层
哦。。。。。
我以为。。。。。
好吧。源代码是这样的。
module clk_gen (clk,reset,clk1,clk2,clk4,fetch,alu_clk,state);
input clk,reset;
output clk1,clk2,clk4,fetch,alu_clk,state;
wire clk,reset;
reg clk2,clk4,fetch,alu_clk;
reg [7:0] state;

parameter s1=8'b00000001;
parameter s2=8'b00000010;
parameter s3=8'b00000100;
parameter s4=8'b00001000;
parameter s5=8'b00010000;
parameter s6=8'b00100000;
parameter s7=8'b01000000;
parameter s8=8'b10000000;
parameter idle=8'b00000000;

assign clk1=~clk;

always @ (negedge clk)
        if(reset)
                begin
                        clk2<=0;
                        clk4<=1;
                        fetch<=0;
                        alu_clk<=0;
                        state<=idle;
                end
         else
            begin
                        case(state)
                                s1:
                                        begin
                                                clk2<=~clk2;
                                                alu_clk<=~alu_clk;
                                                state<=s2;
                                        end
                                s2:
                                        begin
                                                clk2<=~clk2;
                                                clk4<=~clk4;
                                                alu_clk<=~alu_clk;
                                                state<=s3;
                                        end
                                s3:
                                        begin
                                                clk2<=~clk2;
                                                state<=s4;
                                        end
                                s4:
                                        begin
                                                clk2<=~clk2;
                                                clk4=~clk4;
                                                fetch<=~fetch;
                                                state<=s5;
                                        end
                                s5:
                                        begin
                                                clk2<=~clk2;
                                                state<=s6;
                                        end
                                s7:
                                        begin
                                                clk2<=~clk2;
                                                clk4<=~clk4;
                                                state<=s7;
                                    end
                            s8:
                                        begin
                                                clk2<=~clk2;
                                                clk4<=~clk4;
                                                fetch=~fetch;
                                                state<=s1;
                                        end
                                idle:state<=s1;
                                default:state<=idle;
                        endcase
                end
endmodule



源代码就是用一个信号分频成几个信号。

出0入0汤圆

 楼主| 发表于 2009-10-26 22:40:33 | 显示全部楼层
好吧,我这个呢,其实是一本书上的例子。有人建议我从简单的入手,所以呢,我就看看这些例子,发现在rtl图里面确实是很多东西自己不明白。
我用汉语解释:
首先定义了一个模块的端口,有输入的主频clk,复位信号rest,输出信号,clk1,clk2,clk4,fetch,alu_clk,这几个呢,都是由主频分频得到的,分频是用状态机实现的,还有一个输出信号是state,这个state信号是输出状态转换的,是我自己加的,我想查看在什么状态执行了什么操作。

clk1呢,是用连续复制语句实现的对clk信号的一个求反。
clk2信号呢,其实是个2分频信号,在每个状态都实现一次翻转,因为状态是由clk信号的下降沿触发的,这样,翻转也只会发生在clk信号的下降沿,实现了2分频。
clk4信号呢,其实是个4分频信号,在偶数状态实现一次翻转。
。。。。。
然后领我不解的是,rtl图里面的那个decoder后面跟了那么多条线,我想知道的是这么多的线到底占不占实际的资源。

出0入0汤圆

发表于 2009-10-26 23:57:41 | 显示全部楼层
恩,,CLK1,CLK2,CLK4 我猜测也正好是你的本意,,还不理解fetch,alu_clk这两个干什么的!!

我只简单COPY出 我用 VHDL 写的 24 分频 的源码。。我本来是需要 1MHz 的时钟,但是买来的板子 只有 24 MHz的晶振。
感觉你的 “程序”思路比较乱,,(我、没学 v???g,,,,我只初步能用 VHDL,,共参考而已。。)

LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
USE IEEE.Std_Logic_Arith.ALL;
USE IEEE.Std_Logic_Unsigned.ALL;

entity My_Clk is
        port (clk24:IN Std_Logic;
                CKout,C_out:Out Std_Logic);
end My_Clk;

architecture inference of My_Clk is
        signal count_4:Std_Logic_Vector(3 Downto 0);
        signal div12,clk_1M:Std_Logic;

begin
CKout <= clk_1M;
C_out <= not clk_1M;
  process (clk24)
  begin
        if (clk24'EVENT and clk24='1') then
          if (count_4 = "1011") then
                count_4 <= "0000";
                div12 <= '1';
          else
                count_4 <= count_4 + '1';
                div12 <= '0';
          end if;
        end if;
  end process;

  process (div12)
  begin
        if (div12'EVENT and div12='0') then
          clk_1M <= Not clk_1M;
        end if;
  end process;
end inference ;


对称的输出,,正,,反,波型不难。 (原文件名:temp.jpg)

出0入0汤圆

发表于 2009-10-27 07:06:15 | 显示全部楼层
你想下,你用了one-hot的状态机编码,而且还有default,那么你的下一状态逻辑将是多么复杂呢?(2^8种总状态数中只有8个是有用的,所以给你综合出一个8-to-256译码器……)。
你这个情况,如果要求不高,直接用计数器不行么?

one-hot编码一般不是在这种情况下用的。使用one-hot一般是为了简化输出逻辑,在不过大地复杂化次态逻辑的前提下;或者说是一般是为了性能考虑。你这个情况完全没有必要这么做,直接做个计数器搞定。

出0入0汤圆

 楼主| 发表于 2009-10-27 12:27:23 | 显示全部楼层
哦,谢谢啊、、。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 15:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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