kready2 : in std_logic;
kstrobe2 : out std_logic;
kdata2 : out std_logic_vector(15 downto 0);
- error : out std_logic
+ error : out std_logic;
+ startgen : in std_logic
);
end;
yram1 : syncram generic map(tech => memtech, abits => 6, dbits => 16)
port map( clk, m1address, m1datain, m1dataout, m1enable, m1write);
-comb : process (r, rst, kstrobe1, kdata1, kready2, m0dataout, m1dataout)
+comb : process (r, rst, kstrobe1, kdata1, kready2, m0dataout, m1dataout, startgen)
variable v : control_reg;
variable vkready1 : std_logic;
variable verror : std_logic;
end if;
-- reset part
- if rst = '0' then
+ if rst = '0' or startgen = '1' then
v.swf := mem0;
v.swb := mem0;
v.mem0state := empty;
v.hreg.rdoffset := '0';
v.hreg.getval := '0';
v.hreg.rdval := '0';
+ v.hreg.hselff := '0';
+ v.hreg.hreadyff := '0';
v.fetch_state := memwait;
v.dec_state := standby;
v.fifo_rp := (others => '0');
port map(rst => rst, clk => clk, kready1 => kready1, kstrobe1 => kstrobe1, kaddress1 => kaddress1, kdata1 => kdata1, kready2 => kready2,
kstrobe2 => kstrobe2, kdata2 => kdata2, error =>error(0), samp_fact => jpg_setting.samp_fact,
kstrobeq1 => kstrobeq, kdataq1 => kdataq1, kdataq2 => kdataq2,
- kaddq => kaddq, krdq => krdq, krddataq => krddataq);
+ kaddq => kaddq, krdq => krdq, krddataq => krddataq, startgen => startgen);
dct1 : idct1
port map(rst => rst, clk => clk, ready1 => kready2, strobe1 => kstrobe2, coeffin => kdata2,
- quantin => kdataq2, outdata => kdata3, ready2 => kready3, strobe2 => kstrobe3);
+ quantin => kdataq2, outdata => kdata3, ready2 => kready3, strobe2 => kstrobe3, startgen => startgen);
dctmem2 : dctmem2cont
generic map(memtech => memtech)
port map(rst => rst, clk => clk, kready1 => kready3, kstrobe1 => kstrobe3, kdata1 => kdata3,
- kready2 => kready4, kstrobe2 => kstrobe4, kdata2 => kdata4, error => error(1) );
+ kready2 => kready4, kstrobe2 => kstrobe4, kdata2 => kdata4, error => error(1), startgen => startgen);
dct2 : idct2
port map(rst => rst, clk => clk, ready1 => kready4, strobe1 => kstrobe4, coeffin => kdata4,
- outdata => kdata5, ready2 => kready5, strobe2 => kstrobe5);
+ outdata => kdata5, ready2 => kready5, strobe2 => kstrobe5, startgen => startgen);
yccmem : yccmemcont
generic map(memtech => memtech)
port map(rst => rst, clk => clk, kready1 => kready5, kstrobe1 => kstrobe5, kdata1 => kdata5,
kready2 => kready6, kstrobe2 => kstrobe6, kdata2 => kdata6, samp_fact => jpg_setting.samp_fact,
- error => error(2));
+ error => error(2), startgen => startgen);
ycb : yccrgb
generic map(memtech => memtech, hirq => hirq, mhindex => mhindex,
kaddq : in std_logic_vector(7 downto 0);
krdq : in std_logic;
- krddataq : out std_logic_vector(7 downto 0)
+ krddataq : out std_logic_vector(7 downto 0);
+
+ startgen : in std_logic
);
end;
qram : syncram generic map(tech => memtech, abits => 8, dbits => 8)
port map( clk, qaddress, qdatain, qdataout, qenable, qwrite);
-comb : process (r, rst, kstrobe1, kaddress1, kdata1, kready2, m0dataout, m1dataout, kstrobeq1, kdataq1, kaddq, krdq)
+comb : process (r, rst, kstrobe1, kaddress1, kdata1, kready2, m0dataout, m1dataout, kstrobeq1, kdataq1, kaddq, krdq, samp_fact, startgen)
variable v : control_reg;
variable vkready1 : std_logic;
variable verror : std_logic;
-- reset part
- if rst = '0' then
+ if rst = '0' or startgen= '1' then
v.swf := mem0;
v.swb := mem0;
v.mem0state := fill0;
quantin : in std_logic_vector (7 downto 0);
outdata : out std_logic_vector (15 downto 0);
ready2 : in std_logic;
- strobe2 : out std_logic
+ strobe2 : out std_logic;
+ startgen : in std_logic
);
end idct1;
begin
-comb : process(r, rst, strobe1, ready2, coeffin, quantin)
+comb : process(r, rst, strobe1, ready2, coeffin, quantin, startgen)
variable v : all_reg;
variable node0 : std_logic_vector(20 downto 0);
variable node1 : node1_array;
end if;
-- reset part
- if rst = '0' then
+ if rst = '0' or startgen = '1' then
v.data_reg.inreg := (others => '0');
for i in 0 to 7 loop
v.data_reg.accumulator(i) := (others => '0');
coeffin : in std_logic_vector (15 downto 0);
outdata : out std_logic_vector (7 downto 0);
ready2 : in std_logic;
- strobe2 : out std_logic
+ strobe2 : out std_logic;
+ startgen : in std_logic
);
end idct2;
begin
-comb : process(r, rst, strobe1, ready2, coeffin)
+comb : process(r, rst, strobe1, ready2, coeffin, startgen)
variable v : all_reg;
variable node1 : node1_array;
variable node2 : node2_array;
end if;
-- reset part
- if rst = '0' then
+ if rst = '0' or startgen = '1' then
+ v.data_reg.inreg := (others => '0');
for i in 0 to 7 loop
v.data_reg.accumulator(i) := (others => '0');
v.data_reg.result_reg(i) := (others => '0');
kstrobe2 : out std_logic;
kdata2 : out std_logic_vector(11 downto 0);
error : out std_logic;
-
samp_fact : in std_logic;
kstrobeq1 : in std_logic;
kdataq1 : in std_logic_vector(7 downto 0);
- kdataq2 : out std_logic_vector(7 downto 0);
-
+ kdataq2 : out std_logic_vector(7 downto 0);
kaddq : in std_logic_vector(7 downto 0);
krdq : in std_logic;
- krddataq : out std_logic_vector(7 downto 0)
+ krddataq : out std_logic_vector(7 downto 0);
+ startgen : in std_logic
);
end component;
kready2 : in std_logic;
kstrobe2 : out std_logic;
kdata2 : out std_logic_vector(15 downto 0);
- error : out std_logic
+ error : out std_logic;
+ startgen : in std_logic
);
end component;
quantin : in std_logic_vector (7 downto 0);
outdata : out std_logic_vector (15 downto 0);
ready2 : in std_logic;
- strobe2 : out std_logic
+ strobe2 : out std_logic;
+ startgen : in std_logic
);
end component;
coeffin : in std_logic_vector (15 downto 0);
outdata : out std_logic_vector (7 downto 0);
ready2 : in std_logic;
- strobe2 : out std_logic
+ strobe2 : out std_logic;
+ startgen : in std_logic
);
end component;
kstrobe2 : out std_logic;
kdata2 : out std_logic_vector(23 downto 0);
samp_fact : in std_logic;
- error : out std_logic
+ error : out std_logic;
+ startgen : in std_logic
);
end component;
kstrobe2 : out std_logic;
kdata2 : out std_logic_vector(23 downto 0);
samp_fact : in std_logic;
- error : out std_logic
+ error : out std_logic;
+ startgen : in std_logic
);
end;
-- samp_fact = 0 -> 4:1:1
comb : process (r, rst, kstrobe1, kdata1, kready2, samp_fact, y0dataout, y1dataout,
- cb0dataout, cb1dataout, cr0dataout, cr1dataout)
+ cb0dataout, cb1dataout, cr0dataout, cr1dataout, startgen)
variable v : control_reg;
variable vkready1 : std_logic;
variable verror : std_logic;
end if;
-- reset part
- if rst = '0' then
+ if rst = '0' or startgen = '1' then
v.swf := mem0;
v.swb := mem0;
v.mem0state := empty;
+++ /dev/null
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/fs.h>
-#include <linux/cdev.h>
-#include <linux/sched.h>
-#include <asm/current.h>
-#include <asm/uaccess.h>
-#include <asm/io.h>
-
-#include <linux/io.h>
-#include <linux/ioport.h>
-
-#include <linux/interrupt.h>
-#include <linux/fcntl.h>
-#include <linux/slab.h>
-
-#include "kmjpeg.h"
-
-MODULE_LICENSE("GPL");
-
-#define DRIVER_NAME "kmjpeg"
-
-#define AHBADD 0xa0000000
-#define RDYADD 0xa0000200
-#define APBADD 0x80000c00
-
-
-/* Physical address for NEEK
-#define AHBADD 0xb0000000
-#define RDYADD 0xb0000200
-#define APBADD 0x80000700
-*/
-
-static struct kmjpeg_priv *kmjpeg_devices;
-
-static unsigned int kmjpeg_major = 0;
-module_param(kmjpeg_major, uint, 0);
-
-struct kmjpeg_sregs_t {
- volatile unsigned int fbadd;
- volatile unsigned int size_info;
- volatile unsigned int inc_add;
- volatile unsigned int reset;
-};
-
-struct kmjpeg_sregs_t * kmjpeg_sregs;
-
-//volatile unsigned int *apb_regs;
-
-volatile unsigned int *hdata;
-volatile unsigned int *rdyadd;
-
-int kmjpeg_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg)
-{
- int retval = 0;
-
- struct ioctl_cmdreg datareg;
- struct ioctl_cmdwrite datawrite;
-
- unsigned int tmp;
- int i;
-
- memset(&datareg, 0, sizeof(datareg));
- memset(&data4b, 0, sizeof(datawrite));
-
-
- retval = 0;
- switch(cmd){
-
- case IOCTL_WR4BYTE :
- if(!access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd))){
- retval = -EFAULT;
- goto done;
- }
- if(copy_from_user(&datawrite, (int __user *)arg, sizeof(datawrite))){
- retval = -EFAULT;
- goto done;
- }
-
- while(1){
- tmp = *rdyadd;
- if(tmp == 0x80000000)break;
- for(i=0;i<800;i++);
- }
- *hdata = datawrite.pixeldata;
- // for(i=0;i<256;i++){
- // *hdata = data4b.fourbdata[i];
- // for(j=0;j<100000;j++);
- // }
- break;
-
- case IOCTL_REGSET :
- // printk("IOCTL_REGSET\n");
- if(!access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd))){
- retval = -EFAULT;
- printk("ACCESS_NG\n");
- goto done;
- }
- printk("end of access_ok\n");
- if(copy_from_user(&datareg, (int __user *)arg, sizeof(datareg))){
- retval = -EFAULT;
- printk("COPY_NG\n");
- goto done;
- }
- printk("IOCTL regset ..............................\n");
- kmjpeg_sregs = ioremap_nocache(APBADD,12);
- printk("IOCTL regset2 ..............................\n");
- kmjpeg_sregs->fbadd = datareg.fb;
- kmjpeg_sregs->size_info = datareg.size_info;
- kmjpeg_sregs->inc_add = datareg.inc_add;
- kmjpeg_sregs->reset = 0x0;
- kmjpeg_sregs->reset =0xffffffff;
- iounmap(kmjpeg_sregs);
- printk("IOCTL regset3 ..............................\n");
-
- break;
-
- default :
- retval = -EFAULT;
- break;
- }
- done :
- return(retval);
-}
-
-ssize_t kmjpeg_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos)
-{
- int retval = 0;
- unsigned int ycc;
- unsigned char dbuf[3];
-
- if(count != 3){
- retval = -EFAULT;
- goto out;
- }
- if(copy_from_user(dbuf, buf, 3)){
- retval = -EFAULT;
- goto out;
- }
- ycc = (unsigned int)(((unsigned int)dbuf[2]<<16)|((unsigned int)dbuf[1]<<8)|((unsigned int)dbuf[0]));
- *hdata = ycc;
- retval = count;
- out:
- return(retval);
-}
-
-static ssize_t kmjpeg_read(struct file* pFile, char __user* pBuf, size_t len, loff_t* offset)
-{
- return 0;
-}
-
-
-
-
-static int kmjpeg_open(struct inode *inode, struct file *file)
-{
-
- printk("%s: major %d minor %d (pid %d)\n", __func__,imajor(inode),iminor(inode),current->pid);
-
- inode->i_private = inode;
- file->private_data = file;
- printk(" i_private=%p private_data=%p\n",inode->i_private, file->private_data);
- // printk("kmjpeg_open ending\n");
- return 0;
-}
-
-static int kmjpeg_close(struct inode *inode, struct file *file)
-{
- printk("%s: major %d minor %d (pid %d)\n", __func__,imajor(inode),iminor(inode),current->pid);
- printk(" i_private=%p private_data=%p\n",inode->i_private, file->private_data);
-
- return 0;
-}
-
-struct file_operations kmjpeg_fops ={
- .owner = THIS_MODULE,
- .open = kmjpeg_open,
- .release = kmjpeg_close,
- .read = kmjpeg_read,
- .write = kmjpeg_write,
- .ioctl = kmjpeg_ioctl,
-};
-
- static int kmjpeg_init(void)
-{
- int major;
- int ret = 0;
-
- major = register_chrdev(kmjpeg_major, DRIVER_NAME, &kmjpeg_fops);
-
- if((kmjpeg_major > 0 && major != 0) || (kmjpeg_major == 0 && major < 0) || major < 0){
- printk("%s driver registration error\n", DRIVER_NAME);
- ret = major;
- goto error;
- }
- if (kmjpeg_major == 0){
- kmjpeg_major = major;
- }
-
- hdata = ioremap_nocache(AHBADD,4);
- if(hdata==NULL){
- printk("ioremap miss!\n");
- return(0);
- }
- rdyadd = ioremap_nocache(RDYADD,4);
- if(rdyadd==NULL){
- printk("ioremap miss!\n");
- return(0);
- }
- printk("%s driver[major %d] installed.\n", DRIVER_NAME, kmjpeg_major);
-
- error:
- return(ret);
-}
-
-static void kmjpeg_exit(void)
-{
- iounmap(hdata);
- iounmap(rdyadd);
- // kfree(kmjpeg_devices);
-
- unregister_chrdev(kmjpeg_major, DRIVER_NAME);
- printk("%s driver unloaded\n", DRIVER_NAME);
-}
-
-module_init(kmjpeg_init);
-module_exit(kmjpeg_exit);
+++ /dev/null
-#include <linux/ioctl.h>
-
-struct ioctl_cmdw4b{
- unsigned int fourbdata[256];
-};
-struct ioctl_cmdreg{
- unsigned int fb;
- unsigned int size_info;
- unsigned int inc_add;
-};
-
-#define IOC_MAGIC 'k'
-
-#define IOCTL_REGSET _IOW(IOC_MAGIC, 1, struct ioctl_cmdreg)
-#define IOCTL_WR4BYTE _IOW(IOC_MAGIC,2, struct ioctl_cmdw4b)
-
-