VHDL에 관한 질문입니다..

leecc의 이미지

library ieee;use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity bcd_adder is
port(bcd, x : in std_logic_vector(7 downto 0);
bcd_out: out std_logic_vector(7 downto 0));
end bcd_adder;

architecture struct of bcd_adder is
begin
process( bcd )
begin
if (bcd + x) >9 then
bcd_out <= (bcd + x) + "0110";
else
bcd_out <= (bcd + x);
end if;
end process;
end struct;
이 소스가 bcd 4비트에서 어떤 x의 값을 넣어서 더하는 것입니다. 보시다시피 그런데 이걸 bcd 8비트 로 바꾸고 어떠한 x값을 넣고 더하는 것을 해야하는데 어떻게 해야할지 잘 모르겠어요.. ㅠ 도움 요청합니다.ㅠ

semmal의 이미지

숙제와 리포트는 스스로

------------------------------
How many legs does a dog have?

jachin의 이미지

저도 예전에는 '숙제는 집에서 하세요.' 라고 생각했는데,
거꾸로 '복학생'이나, 나이 들어 공부하시는 만학도의 입장이 되어보니
'아, 스스로 공부하기 어렵겠구나.' 하는 생각이 듭니다.

분명 숙제와 리포트는 스스로 해야 하겠지만,
자신이 무엇을 모르고, 무엇을 공부해야 하는지조차 몰라서,
처음부터 '이건 어떻게 해야 하나요?' 라는 질문을 하는 경우가
있을 수 있다고 생각합니다.

답을 알려줄 수는 없겠지요.
그런만큼, 이런 내용의 글에는 심혈을 기울여서
무엇을 공부해야 할지 가르쳐줘야 한다고 생각합니다. :)

jachin의 이미지

BCD(Binary Converted Decimal) 가산기는 10진 계산을 하기 위해서,
각 자릿수마다 4bit 출력을 해야 하지요. 즉, 4bit 신호가 한 자리가 되는 것입니다.

글에 써주신 소스코드는 처음엔 4bit BCD 가산기였지요?
Entity 부분의 Port Signal 범위를 8 bit 으로 맞추어 놓으셨으리라 생각합니다.
왜 그렇게 생각했냐면, Architecture 부분의 process 안에서는 9보다 클 경우를 조건으로 가지고 있기 때문입니다.

자, 질문 내용에서 말씀하신 8 bit BCD 가산기는 10진수로 10의 자리와 1의 자리를 표현하는 가산기를 의미하는 것입니다.
그렇다면 먼저 '수체계'부터 확인해보시는 것이 좋습니다.

BCD 표현 => 10진수

0000 0000 => 0 0
0000 0001 => 0 1
0000 0010 => 0 2
0000 0011 => 0 3
...
0000 1001 => 0 9
0001 0000 => 1 0
0001 0001 => 1 1
0001 0010 => 1 2
0001 0011 => 1 3
...
0001 1001 => 1 9
0010 0000 => 2 0
...
1001 1001 => 9 9

자, 위의 수 변환 체계에서 십의 자리가 한자리 올라갈 때에 BCD 코드는 1001(9)에서 0000(0)으로 바뀌며 상위 자릿수가 바뀌는 것입니다.

본래 4bit BCD Adder를 '전가산기'(올림수를 출력하고, 아랫자리에서의 올림수를 더할 수 있도록 만든 가산기) 형태로 만든다면, 2개를 붙여서 BCD 8 bit Adder 를 만들 수 있는 것입니다.

만약, 그렇게 만들기가 어렵다면, (package 문을 쓸 줄 몰라서, 혹은 Port Mapping을 할 줄 몰라서 Entity를 불러올 줄 모른다면,)
process 구문 다음에 variable 변수 bcd_carry를 4 bit로 지정한 후,
bcd의 하위 4bit 와 x의 하위 4bit를 더해서
i) 9보다 클 경우, bcd_carry에 0001 을 입력하게 하고, bcd 하위 4 bit 와 x 하위 4 bit 의 더한 값에서 1100 을 빼고, 그 나머지 값을 bcd_out의 하위 4bit에 저장합니다.
ii) 9보다 크지 않을 경우, bcd 하위 4bit와 x 하위 4 bit 를 더한 겂을 bcd_out의 하위 4bit에 바로 저장합니다.
그리고 bcd_carry와, bcd 의 상위 4 bit, x 의 상위 4 bit 를 더해서 bcd_out의 상위 4bit에 저장하면 됩니다. 물론, 이 값도 범위값인 1001을 넘어갈 수 있으니, 일의 자리처럼 1001을 넘어가면 1100을 빼도록 하셔도 좋습니다. (이게 100점짜리겠죠?)

이론을 이해한다면, 직접 구현하는 것은 어렵지 않다고 생각합니다. 불안하시면 다시 수정하셔서 올려주시면, 잘못된 부분을 고쳐드리겠습니다. :)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.