微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请大侠们帮看此程序,小妹实在看不懂了

请大侠们帮看此程序,小妹实在看不懂了

时间:10-02 整理:3721RD 点击:
小妹对VHDL语言实在没研究,请大侠们看过程序后帮忙把实体中定义的输出输入端口详细标明一下,小妹在此谢过~
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity ddd is
port(clk:in std_logic;
din:in std_logic_vector(7 downto 0);
aut std_logic_vector(5 downto 0);
dout,qut std_logic_vector(7 downto 0);
en,wr,cs,rdut std_logic);
end ddd;
architecture ddd_arc of ddd is
begin
process(clk)
variable x:std_logic;
variable state:integer range 0 to 1;
variable tmp:integer range 0 to 2;
variable aa:std_logic_vector(5 downto 0);
variable cnt:integer range 0 to 3;
variable do:std_logic_vector(7 downto 0);
begin if clk'event and clk='1' then
if x='0' then
wr<='1';
cs<='1';
rd<='1';
x:='1';
else
case state is
when 0=>case tmp is
when 0=>a<=aa;
case aa is
When"000000"=>do:="00000000";
When"000001"=>do:="00000001";
When"000010"=>do:="00000010";
When"000011"=>do:="00000011";
When"000100"=>do:="00000100";
When"000101"=>do:="00000101";
When"000110"=>do:="00000110";
When"000111"=>do:="00000111";
When"001000"=>do:="00001000";
When"001001"=>do:="00001001";
When"001010"=>do:="00001010";
When"001011"=>do:="00001011";
When"001100"=>do:="00001100";
When"001101"=>do:="00001101";
When"001110"=>do:="00001110";
When"001111"=>do:="00001111";
When"010000"=>do:="11110000";
When"010001"=>do:="11110001";
When"010010"=>do:="11110010";
When"010011"=>do:="11110011";
When"010100"=>do:="11110100";
When"010101"=>do:="11110101";
When"010110"=>do:="11110110";
When"010111"=>do:="11110111";
When"011000"=>do:="11111000";
When"011001"=>do:="11111001";
When"011010"=>do:="11111010";
When"011011"=>do:="11111011";
When"011100"=>do:="11111100";
When"011101"=>do:="11111101";
When"011110"=>do:="11111110";
When"011111"=>do:="11111111";
When"100000"=>do:="11111110";
When"100001"=>do:="11111101";
When"100010"=>do:="11111100";
When"100011"=>do:="11111011";
When"100100"=>do:="11111010";
When"100101"=>do:="11111001";
When"100110"=>do:="11111000";
When"100111"=>do:="11110111";
When"101000"=>do:="11110110";
When"101001"=>do:="11110101";
When"101010"=>do:="11110100";
When"101011"=>do:="11110011";
When"101100"=>do:="11110010";
When"101101"=>do:="11110001";
When"101110"=>do:="11110000";
When"101111"=>do:="11111111";
When"110000"=>do:="11101111";
When"110001"=>do:="11011111";
When"110010"=>do:="11001111";
When"110011"=>do:="10111111";
When"110100"=>do:="10101111";
When"110101"=>do:="10011111";
When"110110"=>do:="10001111";
When"110111"=>do:="01111111";
When"111000"=>do:="01101111";
When"111001"=>do:="01011111";
When"111010"=>do:="01001111";
When"111011"=>do:="00111111";
When"111100"=>do:="00101111";
When"111101"=>do:="00011111";
When"111110"=>do:="00001111";
When"111111"=>do:="11111111";
when others=>null;
end case;
dout<=do;
tmp:=1;
when 1=>wr<='0';
cs<='0';
tmp:=2;
when 2=>aa:=aa+1;
if aa="000000"then
state:=1;
en<='1';
end if;
wr<='1';
cs<='1';
tmp:=0;
end case;
when 1=>case cnt is
when 0=>a<=aa;
aa:=aa+1;
cnt:=1;
when 1=>rd<='0';
cs<='0';
cnt:=2;
when 2=>q<=din;
cnt:=3;
when 3=>rd<='1';
cs<='1';
cnt:=0;
end case;
end case;
end if;
end if;
end process;
end ddd_arc;
----------------------------------------------------------------------------
还有这个程序
library ieee;
use ieee.std_logic_1164.all;
entity scan1 is
port(aa:in std_logic_vector(7 downto 0);
en:in std_logic;
bb:inout std_logic_vector(7 downto 0);
qq:out std_logic_vector(7 downto 0));
end scan1;
architecture san_arc of scan1 is
begin
process(aa,en,bb)
begin
if en='0'then
bb<=aa;
else
bb<="ZZZZZZZZ";
qq<=bb;
end if;
end process;
end san_arc;

[求助]请大侠们帮看此程序,小妹实在看不懂了
[这个贴子最后由iamchine在 2004/06/21 07:41am 第 3 次编辑]
Verilog看的懂吧?
moduleddd ( //inputs
clk,
din,
// outputs
a,
dout,
q,
en,
wr,
cs,
rd
);
// inputs
inputclk;
input[7:0]din;
// outputs
output[5:0]a;
output[7:0]dout;
output[7:0]q;
outputen;
outputwr;
outputcs;
outputrd;
// wires of inputs
wireclk;
wire[7:0]din;
// wires of outputs
// regs of outputs
reg[5:0]a;
reg[7:0]dout;
reg[7:0]q;
regen;
regwr;
regcs;
regrd;
// internal signals
// wires of internal signals
// regs of internal signals
regx;
reg[5:0]aa;
reg[7:0]do;
// integers
integerstate;
integertmp;
integercnt;
// main code
always@(posedge clk)
begin
if(x==1'b0)
begin
wr <= 1'b1;
cs <= 1'b1;
rd <= 1'b1;
x<= 1'b1;
end// end x==1'b0
else
begin
case (state)
0 :
begin
case (tmp)
0:
begin
a <= aa;
case (aa)
6'b000000: do <= 8'b00000000;
6'b000001: do <= 8'b00000001;
6'b000010: do <= 8'b00000010;
6'b000011: do <= 8'b00000011;
6'b000100: do <= 8'b00000100;
6'b000101: do <= 8'b00000101;
6'b000110: do <= 8'b00000110;
6'b000111: do <= 8'b00000111;
6'b001000: do <= 8'b00001000;
6'b001001: do <= 8'b00001001;
6'b001010: do <= 8'b00001010;
6'b001011: do <= 8'b00001011;
6'b001100: do <= 8'b00001100;
6'b001101: do <= 8'b00001101;
6'b001110: do <= 8'b00001110;
6'b001111: do <= 8'b00001111;
6'b010000: do <= 8'b11110000;
6'b010001: do <= 8'b11110001;
6'b010010: do <= 8'b11110010;
6'b010011: do <= 8'b11110011;
6'b010100: do <= 8'b11110100;
6'b010101: do <= 8'b11110101;
6'b010110: do <= 8'b11110110;
6'b010111: do <= 8'b11110111;
6'b011000: do <= 8'b11111000;
6'b011001: do <= 8'b11111001;
6'b011010: do <= 8'b11111010;
6'b011011: do <= 8'b11111011;
6'b011100: do <= 8'b11111100;
6'b011101: do <= 8'b11111101;
6'b011110: do <= 8'b11111110;
6'b011111: do <= 8'b11111111;
6'b100000: do <= 8'b11111110;
6'b100001: do <= 8'b11111101;
6'b100010: do <= 8'b11111100;
6'b100011: do <= 8'b11111011;
6'b100100: do <= 8'b11111010;
6'b100101: do <= 8'b11111001;
6'b100110: do <= 8'b11111000;
6'b100111: do <= 8'b11110111;
6'b101000: do <= 8'b11110110;
6'b101001: do <= 8'b11110101;
6'b101010: do <= 8'b11110100;
6'b101011: do <= 8'b11110011;
6'b101100: do <= 8'b11110010;
6'b101101: do <= 8'b11110001;
6'b101110: do <= 8'b11110000;
6'b101111: do <= 8'b11111111;
6'b110000: do <= 8'b11101111;
6'b110001: do <= 8'b11011111;
6'b110010: do <= 8'b11001111;
6'b110011: do <= 8'b10111111;
6'b110100: do <= 8'b10101111;
6'b110101: do <= 8'b10011111;
6'b110110: do <= 8'b10001111;
6'b110111: do <= 8'b01111111;
6'b111000: do <= 8'b01101111;
6'b111001: do <= 8'b01011111;
6'b111010: do <= 8'b01001111;
6'b111011: do <= 8'b00111111;
6'b111100: do <= 8'b00101111;
6'b111101: do <= 8'b00011111;
6'b111110: do <= 8'b00001111;
6'b111111: do <= 8'b11111111;
default:
endcase// end case aa
dout <= do;
tmp<= 1;
end // end tmp=0
1:
begin
wr <= 1'b0;
cs <= 1'b0;
tmp<= 2;
end// end tmp=1
2:
begin
aa <= aa + 6'b1;
if (~|aa)
begin
state <= 1;
en <= 1'b1;
end
wr <= 1'b1;
cs <= 1'b1;
tmp<= 0;
end// end tmp=2
endcase// end case tmp
end// end state=0
1:
begin
case (cnt)
0: begin
a <= aa;
aa<= aa + 6'b1;
cnt <= 1;
end// end cnt=0
1: begin
rd <= 1'b0;
cs <= 1'b0;
cnt<= 2;
end// end cnt=1
2: begin
q <= din;
cnt <= 3;
end// end cnt=2
3: begin
rd <= 1'b1;
cs <= 1'b1;
cnt <= 0;
end// end cnt=3
endcase// end case cnt
end// end state=1
endcase// end case state
end// end x!=1'b1
end
endmodule
modulescan1( //inputs
aa,
en,
// inouts
bb,
// outputs
qq
);
// inputs
input[7:0]aa;
inputen;
// inout
inout[7:0]bb;
// outpus
output [7:0]qq;
// wires
wire[7:0]aa;
wireen;
// inout
wire[7:0]bb;
// outpus
wire[7:0]qq;
assignqq = bb;
assignbb = (!en) ? aa : 8'bzzzzzzzz;
endmodule// it's a bi-direction bus port

[求助]请大侠们帮看此程序,小妹实在看不懂了
蜉蝣真是热心。

[求助]请大侠们帮看此程序,小妹实在看不懂了
闲着也是闲着。

[求助]请大侠们帮看此程序,小妹实在看不懂了
蜉蝣,先谢谢您的好意了,不过我对你说的那种语言更是一窍不通,怎么办啊?我现在还很着急想懂得那个程序,请大家帮帮我,好不好?

[求助]请大侠们帮看此程序,小妹实在看不懂了
只听[咣当]一声,蜉蝣连人带椅向后摔倒。

[求助]请大侠们帮看此程序,小妹实在看不懂了
呵呵,那没有办法了:)

[求助]请大侠们帮看此程序,小妹实在看不懂了
哈哈,蜉蝣,还是要谢谢你,不管怎样,不过从你的意思里看出好象你说的那种语言比VHDL简单,那你看你打的那程序能看明白吗?如果可以的话,能不能帮帮忙,我真的很需要。我晓得程序不难,就是我自己太笨,你们都是高手,一定可以的,是不是?求求你们了,帮帮我,真的很需要。

[求助]请大侠们帮看此程序,小妹实在看不懂了
这是一个状态机的代码,你应先学习状态机的原理和工作。先看最简单的并有说明的。

[求助]请大侠们帮看此程序,小妹实在看不懂了
各位大哥大姐啊,如果我有时间从头学,我还在这着急什么,谁又能一口吃个胖子啊?帮帮忙吧

[这个贴子最后由iamchine在 2004/06/21 07:41am 第 1 次编辑]
好吧,多说几句。
// inputs
inputclk;
input[7:0]din;
// outputs
output[5:0]a;
output[7:0]dout;
output[7:0]q;
outputen;
outputwr;
outputcs;
outputrd;
上面的就是第一个实体/模块的输入输出,中间的[7:0]/[5:0]代表它们的位宽。不知道小编对数字电路有多少理解?至于里面具体的行为,就是1个状态机,根据x,state,tmp,cnt等变量的不同产生不同的输出,但是这个程序是有Bug的。如果小编懂C的话,Verilog的语法相对易懂些,我改的代码里面“//”之后部分是注释。
第二个实体/模块就是一组双向端口总线的VHDL/Verilog实现,bb[7:0]是外部输入输出端口,aa[7:0],qq[7:0]分别是内部的输出,输入总线,en是输出三态使能信号。

[求助]请大侠们帮看此程序,小妹实在看不懂了
个人认为只要是懂点高级语言(比如C)和数字电路知识的都应该看得懂吧。与其等别人的时间自己认真看看更好一些吧。声明:我是菜鸟,一个星期前才接触CPLD。

[求助]请大侠们帮看此程序,小妹实在看不懂了
为什么没有时间呢

[求助]请大侠们帮看此程序,小妹实在看不懂了
没想到这个帖子都成这样了。
建议还是去看下verilog或vhdl的语法吧,对照着只看相关部分估计也就一两天。否则我们没法交流了。

[求助]请大侠们帮看此程序,小妹实在看不懂了
那位菜鸟朋友,我懂C,而且懂点数字电路知道,想必你也懂吧,你看懂了吗?为什么不帮我注解一下呢?我接触这个东西还不到一个星期呢,要不是时间紧,我会学的,谢谢~

[求助]请大侠们帮看此程序,小妹实在看不懂了
呵呵,懂C的话一天就能看懂的。我刚开始学的时候1天的时候已经能基本看懂代码了。不要懒,大家都是这样过来的

[求助]请大侠们帮看此程序,小妹实在看不懂了
蜉蝣,谢谢你,你已经帮了我很大的忙了,谢谢谢谢谢谢

[求助]请大侠们帮看此程序,小妹实在看不懂了
小编小同学,其实这里的网友都是很热心的,只是希望好问的同学同时也勤学,或许你这次是迫于时间压力和自己学习的难度,但是大家仍然希望你今后能多学多问,学问是自己的,别人偷不去的。

[求助]请大侠们帮看此程序,小妹实在看不懂了
还是要谢谢你们咯,我现在在学VHDL语言,不过在我提出这问题那段时间,我是真的没有时间去学这语言,现在开始学了,希望还没晚。

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

网站地图

Top